閉包可以捕獲和儲存其所在上下文中任意常量和變數的引用。這就是所謂的閉合幷包裹著這些常量和變數,俗稱閉包。閉包有三種形式:
- 全域性函式是乙個有名字,但不會捕獲任何值得閉包
- 巢狀函式是乙個有名字,並可以捕獲其封閉函式域內值的閉包。
- 閉包表示式是乙個利用輕量級語法所寫的可以捕獲其上下文變數或常量值的匿名閉包。
swift
的閉包表示式擁有簡潔的風格,並鼓勵在常見場景中進行語法優化,主要優化如下:1. 利用上下文推斷引數和返回值型別 。
2. 隱式返回單表示式閉包,即單表示式閉包可以省略
return
關鍵字 。3. 引數名稱縮寫。
4. 尾隨(
trailing
)閉包語法。
let names = ["chirs","slex","ewa","narry","dannile"]
var reversed = names.sorted()
print(reversed)
// ["chirs", "dannile", "ewa", "narry", "slex"]
func backwards(s1:string,s2:string)->bool
var reversed1 = names.sorted(by: backwards)
print(reversed1)
// ["chirs", "dannile", "ewa", "narry", "slex"]
var reversed2 = names.sorted(by: <)
print(reversed2)
// ["chirs", "dannile", "ewa", "narry", "slex"]
var reversed3 = names.sorted
print(reversed3)
// ["slex", "narry", "ewa", "dannile", "chirs"]
var reversed4 = names.sorted
print(reversed4)
// ["slex", "narry", "ewa", "dannile", "chirs"]
var reversed5 = names.sorted
print(reversed5)
// ["slex", "narry", "ewa", "dannile", "chirs"]
// 宣告乙個函式
func somefunctionthattakesaclosure(_ closure:()->())
// 不使用尾隨閉包的方式
somefunctionthattakesaclosure
()// 使用尾隨閉包的方式
somefunctionthattakesaclosure
()// 由於只有乙個閉包表示式引數,括號()也可以省略
somefunctionthattakesaclosure
func makeincrementor(amount:int) ->
()->int
return incrementtor
}let incrementbyten = makeincrementor(amount: 10)
incrementbyten() //
10incrementbyten() //
20incrementbyten() //
30let incrementbyseven = makeincrementor(amount: 7)
incrementbyseven() //
7incrementbyseven() //
14incrementbyten() //
40
let incrementbyten2 = incrementbyten
incrementbyten2() // 50
class
clourse
}
class
clourse2
}
let name:string
let text:string?
lazy var someclourse:() -> string = else
}init(name:string,text:string? = nil)
deinit
}var clourse1:clourse? = clourse(name: "wangsk", text: nil)
var clourse2:clourse? = clourse(name: "wangsk", text: "csdn")
print(clourse1!.someclourse())
print(clourse2!.someclourse())
clourse1 = nil
clourse2 = nil
/*wangsk
wangsk csdn wangsk
wangsk銷毀
wangsk銷毀
*/
Swift學習筆記(12) 閉包
以下定義了乙個接收引數並返回指定型別的閉包語法 簡單的小例子 let divide let result divide 200,20 print result 以上程式執行輸出結果為 10let names at ae d s be 使用普通函式 或內嵌函式 提供排序功能,閉包函式型別需為 stri...
swift 學習《五》 閉包
函式 格式 引數列表 對外名內部使用名 引數型別,對外名內部使用名 引數型別 閉包格式 宣告乙個引數是閉包的函式 func 函式名 閉包名 引數名 引數型別 引數名 引數型別 返回值 呼叫 引數中帶閉包的函式 函式名 1,尾隨引數,沒有值的括號可省,沒有返回值是,in 都課省 2,in 的作用是,分...
Swift學習筆記 函式和閉包(1)
函式是swift的重要組成單位,乙個swift程式可以包含很多函式 函式定義和呼叫 定義乙個函式,宣告2個形參,返回int型別 func max x int y int int 宣告乙個函式,宣告乙個形參,返回string型別 func sayhi name string string var a ...