Swift 函式式程式設計 捕獲 閉包記憶體管理

2021-06-28 09:41:08 字數 1840 閱讀 4642

import

uikit

varwords = [

"abd"

,"angry"

,"anger"

,"hungry"]

words

.filter //

按閉包的規則篩選

.map      

//按閉包的規則轉換,

map並不修改原數值的內容,只是返回處理後的新陣列

.reduce

("oxox"

, combine: )

//按閉包規則組合三個字串

//上面三個方法其實是在一行,不斷的向後處理,更便於檢視,與下面相同效果

words

.filter

().map

( ).

reduce

("oxox"

,combine: )

//用隱式引數簡化

println(

words

.filter

.map 

//把傳過來的每個元素統一進行乙個操作:(如果是送過來一對元素,則有

$0,$1)與c

相加 .

reduce

("oxox")

)//====

捕獲====

//閉包(函式也是閉包)中,可以捕獲閉包外的變數的位址,並使用之

func

sum(numbers: [

int]) -> [

int]

somenumber = numbers.

mapfor

item

innumbers

println

("sum1=

\(sum1)

,sum2=

\(sum2)

,sum3=

\(sum3)")

return

somenumber

}varintarr2: [

int]=[1,

2,3,

5]var

numberarr =

sum(

intarr2)

varnewarr =

numberarr

.map

newarr

//[2, 4, 7, 12]

//函式式程式設計

//將函式、方法作為引數送給系統方法

,不需要使用閉包了

words

.map

(println

) //

等價於words.map()

func

addstring(

varsomestring:

string

) ->

string

varnewwords =

words

.map

(addstring

) //["abd!","angry!","anger!","hungry!"]

//閉包

/函式都是

arc物件

func

makeincrementor(forincrement amount:

int) -> () ->

intreturn

incrementor

}letincrementbyten =

makeincrementor

(forincrement:10)

incrementbyten

()   

//返回10

incrementbyten

()   

//返回20

函式式程式設計 閉包

def curve pie a 25 defcurve x return a pow x,2 return curve f curve pie print f 2 輸出結果 ans 100 檢驗函式是否閉包 print f.closure 環境變數 a 25 print f.closure 0 ce...

Swift那些事兒 閉包(捕獲值)

參考 閉包可以在其定義的上下文中捕獲常量或變數。即使定義這些常量和變數的原域已經不存在,閉包仍然可以在閉包函式體內引用和修改這些值。swift最簡單的閉包形式是巢狀函式,也就是定義在其他函式的函式體內的函式。巢狀函式可以捕獲其外部函式所有的引數以及定義的常量和變數。import cocoa func...

函式式程式設計與閉包

函式式程式設計 functional programming,fp fp是程式設計正規化之一,他和物件導向程式設計是並列的關係,函式式程式設計我們可以認為是一種思維的方法,加上他的實現方法,我們常聽說的程式設計正規化還有面向過程程式設計 物件導向程式設計。面向過程其實就是現實世界的處理方式,一步一步...