swift 深入理解Swift的閉包

2021-09-07 03:52:06 字數 1587 閱讀 3359

我們可用swift的閉包來定義變數的值。 先來乙個簡單的例子大家先感受感受。  

定義乙個字串的變數的方法:  

直接賦值

var str="jobdeer"

還可以用閉包的方式定義:

var str:string=()

閉包還可以這麼定義,省略了等號和括號:

var str:string

閉包中可以定義get方法。

var str:string

}既然用可以用get方法, 那麼能用set方法嗎?  

可以的:  

var str:string  

set}

我們在用 willset 和didset方法試一試,  注意 用 willset /didset不能和get/set共同使用的, 在使用willset /didset時,變數需要有初始值。 所以這麼使用:  

var str:string="jobdeer"

didset

}str="new value"

通過上面這個例子, 我們感覺閉包的表達實現形式很多。 下面系統總結一下。

最全的定義形式是 :

(arguments)

可以在閉包中定義引數,返回值。 閉包後用括號執行,並在括號中可以傳參。 例如: 

var str=("job","deer")

基於上面最全的定義方式, 我麼可以省略引數的型別:  

var str=("job","deer")

為什麼能省略引數型別?  那是因為, swift的型別推導,根據後面括號的傳參能自動判斷引數的型別。

然後我們可以省略閉包中的返回值型別

var str:string=("job","deer")

注意,閉包省略了返回值型別後,變數要顯示宣告它的型別, 之所以能省略返回值型別,那也是因為swift型別推導,先知道了變數的型別,所以可以省略返回值型別。

還不夠爽,我們可以把引數也省略了

var str:string=("job","deer")

如果閉包中只有一行**, 其實return 也能省略。

var str:string=("job","deer")

如果閉包沒有定義引數 ,像這樣

var str:string=()

括號中根本沒有傳引數, 括號能不能省略呢?

可以把括號省略了

省略括號的同時等號也不能寫

var str:string

上面這種閉包表現方法似曾相識, 如果你學過swift的類,知道類的屬性可以用閉包表示, 可以在閉包中定義 set, get , willset,didset等方法。 那麼上面變數是否也能這樣定義呢?  

答案是肯定的:  

可以定義set,get,willset,didiset等方法

var str:string  

set

} 或者: 

var str:string="jobdeer"

didset

} str="new value"

其實類的屬性就是變數。 類的屬效能定義的 set, get , willset,didset 在變數中也能定義。

swift 深入理解Swift的閉包

我們可用swift的閉包來定義變數的值。先來乙個簡單的例子大家先感受感受。定義乙個字串的變數的方法 直接賦值 var str jobdeer 還可以用閉包的方式定義 var str string 閉包還可以這麼定義,省略了等號和括號 var str string 閉包中可以定義get方法。var s...

swift 深入理解Swift的閉包

我們可用swift的閉包來定義變數的值。先來乙個簡單的例子大家先感受感受。定義乙個字串的變數的方法 直接賦值 var str jobdeer 還可以用閉包的方式定義 var str string 閉包還可以這麼定義,省略了等號和括號 var str string 閉包中可以定義get方法。var s...

swift深入理解閉包

我們可用swift的閉包來定義變數的值。先來乙個簡單的例子大家先感受感受。定義乙個字串的變數的方法 直接賦值 var string a string 還可以用閉包的方式定義 var string1 string 閉包還可以這麼定義,省略了等號和括號 var string2 string 閉包中可以定...