closure
Swift functions are closures.
意思就是closure可以在function的範圍內抓外部變數來引用
來看一下這段程式碼
class Dog {
var whatThisDogSays = "woof"
func bark() {
print(self.whatThisDogSays)
}
}
這段程式碼裡面函式指向一個變數whatThisDogSays
那變數在函式外部,因為它宣告在函式的外部,但內部的還是可以看到他並使用,因此函式bark 可以傳遞value,但whatThisDogSays 的reference 是怎麼傳遞的?
func doThis(f : Void -> Void) {
f()
}
let d = Dog()
d.whatThisDogSays = "arf"
let f = d.bark
doThis(f) // arf
在上面這段程式碼裡面,我們並沒有直接呼叫bark
我們創造一個Dog的實體物件d,然後傳遞bark的方法值到doThis
現在whatThisDogSays 是一個實體屬性屬於Dog類別
雖然在doThis這個方法裡面沒有whatThisDogSays
的確,在方法內doThis沒有Dog 的物件,但f()仍然可以運作
這個方法d.bark,即使他被到處傳遞,卻仍然可以看到被宣告在外的變數whatThisDogSays ,即使whatThisDogSays 這個被呼叫的變數不屬於Dog類別的物件,也不屬於任何物件的方法。
bark方法
Comments
Post a Comment