swift深入理解閉包

2022-08-21 12:09:14 字數 2198 閱讀 3597

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

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

直接賦值: 

var

string = "

a string

"

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

var string1: string =()

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

var

string2: string

閉包中可以定義get方法

var

string3: string

}

也可以定義set方法,但定義set方法必須有get方法

var

string4: string

set}

也可以使用 willset 和didset方法, 注意 willset /didset不能和get/set共同使用的, 在使用willset /didset時,變數需要有初始值

var string5: string = "

a string

" didset

}

string5 = "new value"

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

閉包最全的定義形式是:

(arguments)

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

var componsestring =("a

", "b"

)print(componsestring)   //"ab\n"

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

var componsestring1 =("a

", "b"

)print(componsestring1)   

//"ab\n"

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

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

var componsestring2: string =("a

", "b"

)print(componsestring2)

//"ab\n"

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

還可以把引數省略掉

var componsestring3: string =("a

", "b"

)print(componsestring3)

//"ab\n"

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

var componsestring4: string =("a

", "b"

)print(componsestring4)

//"ab\n"

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

var componsestring5: string =()

print(componsestring5)

//"a string"

可以把括號省略了,省略括號的同時,也不能寫等號

var

componsestring6: string

print(componsestring6)

//"a string"

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

var

string4: string

set}

var string5: string = "a string"

didset

}

string5 = "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的閉包

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