swift交流羣:342581988,歡迎加入!
這兩天看了看這個文檔,基本上好像這兩個符號很是讓人不爽,決定一探究竟,把最新心得記錄與此。
首先就是這個叫optionals的東西,查了字典,暫且叫可選值吧,官方文檔說,它這是一個值,並且它等於一個x,或者它什麼也不是,
其實說就是它要麼有一個值,要麼什麼也沒有,而且這個值也是有規定的,後面說。
下面把官方例子說一下
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
很明顯,這是一個string to int的轉換,而且肯定也是沒問題的,這個事能成功的,但是我們考慮另外一種情況let possibleNumber = "Hello World"
let convertedNumber = possibleNumber.toInt()
這個也很明顯,是不可能成功轉換的。這個時候,“?”就出現了,也就是當我們不能十分確定這個值一定會有一個有效值得時候我們就應該在變量名後面加一個?,也就是Int?了,當我們把變量聲明爲Int?的時候,其實也就是說這個變量要麼是Int類型,要麼就什麼也沒有,不可能是其他的值,比如說Bool或者String類型就全部排除了。
下面在說說這個“!”符號,當一個optionals類型的變量被你確定裏面是有值得時候,比如說,let a : int? = 9那麼我們要用這個a的時候,那就必須在後面加上“!”,比如打印println("\(a!)"),如果不加,那麼你就只能乾着急了可能。好吧,把官網例子抄一下吧。接着上面第一個例子來,
if convertNumber{
println("\(possibleNumber) has an integer value of \(convertNumber!)")
}else{
println("\(possibleNumber) could not be converted to an integer")
}
所以說,如果你對一個optionals值不確定的時候,不要亂用!,因爲可能他真的沒東西。 ,
後邊還有個optional binding,我不知道怎麼翻譯就叫選擇捆綁吧,希望糾正啊,
也就是和if條件表達捆綁使用,其實和上面差不多,只是在執行體中用了一個普通變量而已,
上代碼
if let actualNumber = possibleNumber.toInt(){
println("\possibleNumber) has an integer value of \(actualNumber)")
}else{
println("\(possibleNumber) could not be convert to an integer")
}
這裏actualNumber就不用加!了。
下面說說nil吧,
在Swift裏面,不是任何 都能用nil的,只有聲明爲optional的才能等於nil,
var serverResponseCode : Int? = 404
serverResponseCode = nil
這裏是沒有問題的,但是一個非optional類型就不能直接賦值爲nil,如果你真想,那就把他寫成optional類型吧。
好吧,就寫到這吧
特別備註:本文很有可能有很多錯誤請大家看出務必指出,好及時更正!包括翻譯