closure

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

Popular posts from this blog

MEGA 暫存檔案刪除

IOS GCD多執行緒

利用CMD指令強制刪除