swift中閉包(closure)

下面是一個(gè)基本的閉包:

var multiplyClosure = { (a: Int, b: Int) -> Int in

return a * b

}

這就是一個(gè)基本的閉包類(lèi)型,其基本格式為{ (參數(shù)列表)-> 返回值 in 函數(shù)體}

對(duì)上面這個(gè)閉包,可以進(jìn)行如下的精減

1、去掉return

var multiplyClosure = { (a: Int, b: Int) -> Int in

a * b

}

2、去掉返回值類(lèi)型,讓系統(tǒng)自己推斷

var multiplyClosure = { (a: Int, b: Int) in

a * b

}

3、將參數(shù)中的類(lèi)型聲明去掉,這種情況要實(shí)現(xiàn)聲明變量的類(lèi)型為閉包

var multiplyClosure: (Int,Int) -> Int

multiplyClosure = { (a, b) in

a * b

}

4、最后還可以將參數(shù)列表去掉,根據(jù)參數(shù)出現(xiàn)的位置來(lái)處理

var multiplyClosure: (Int,Int) -> Int

multiplyClosure = {

$0 * $1

}


聲明一個(gè)沒(méi)有參數(shù)和返回值的閉包

let voidClosure: () -> Void = {

print("Swift is awesome")

}

voidClosure()

下面這個(gè)是閉包作為返回值的一個(gè)例子

func countingClosure() -> (() -> Int) {

print("ok")

var counter = 0

let incrementCounter: () -> Int = {

print(counter)

counter += 1

print(counter)

return counter

}

return incrementCounter

}

let counter1 = countingClosure()

let counter2 = countingClosure()

//counter1時(shí)一個(gè)閉包,閉包作為函數(shù)執(zhí)行,返回int類(lèi)型的值

counter1()

counter1()

counter2()


一個(gè)例子:

func mathSum(times: Int, operation: (Int) -> Int) -> Int {

var result = 0

for i in 1...times {

result += operation(i)

}

return result

}

var result1 = mathSum(10, operation: {(a: Int) -> Int in return a * a })

print(result1)

var result2 = mathSum(10, operation: {(a: Int) -> Int in fibonacci(a)})

print(result2)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容