六、Swift可選型與拆解包

可選類型(?) 
/* 
這個值要麼存在, 並且等於x, 要麼不存在 
*/

舉個例子 
由於toInt方法可能會失敗,因此它會返回一個可選的Int類型,而不同於Int類型。一個可選的Int類型被記爲Int?,不是Int。問號表明它的值是可選的,可能返回的是一個Int,或者返回的值不存在。

這裏寫let possibleNumber = "123"
let convertedNumber: Int? = possibleNumber.toInt()
  • 1
  • 2
  • 1
  • 2

可選類型類似於Objective-C中指針的nil值,但是nil只對類(class)有用,指對象不存在,而Swift 的 nil 不是指針,它代表特定類型的值不存在。任何類型的可選類型都能賦值爲 nil,而不僅限於對象類型。並且更安全。

var responseCode: Int? = 404    //要麼存在, 且值爲404
responseCode = nil              //要麼不存在, 可以賦值爲nil表示不存在
  • 1
  • 2
  • 1
  • 2

swift中“nil”的使用: 
/* 
1.Swift裏面nil 不能用於非可選類型 
2.如果代碼中的常量或者變量需要適配值不存在的情況, 務必將它聲明爲恰當的可選類型 
3.如果定義的可選類型的對象不提供默認值, 該對象將自動設爲nil 
*/

//var strValue = nil    //錯誤
var strValue: String? = "hello"
  • 1
  • 2
  • 1
  • 2
//let hashValue = strValue.hashValue    //錯誤。對於Optional值,不能直接進行操作
let hashValue = strValue?.hashValue     //問號的意思是詢問可選量是否響應後面這個方法
  • 1
  • 2
  • 1
  • 2

/* 
總結 ? 的使用場景 
1.聲明Optional變量 
2.用在Optional值操作中,用來判斷是否響應後面的操作 
*/

解包(!) 
/* 
如果確定一個可選類型的對象的值一定存在,那麼我們使用 !進行解包獲取它的值,或者使用Optional Binding。 
*/ 
舉個例子

let possibleString: String? = "An optional string"
println(possibleString!)    //解包, 我確定possibleString的值一定存在, 不需要每次都驗證他的值是否存在

let stringValue = possibleString!.hashValue //必須解包,才能獲取可選量的屬性或者方法
《==》
//Optional Binding, 等價於上面一行
if let sValue = possibleString {
    let stringValue = sValue.hashValue
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

隱式解包的可選類型 
/* 
你可以把 隱式解包可選類型 當成對每次使用的時候自動解包的可選類型。即不是每次使用的時候 在變量/常量後面加!,而是直接在定義的時候加! 
*/

let assumedString: String! = "An implicitly unwrapped optional string"
println(assumedString)
println(assumedString.hashValue)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

/* 
總結!的使用場景 
1.強制對 可選量 進行解包 
2.聲明 隱式解包的可選類型的時候, 一般用於類中的屬性 

*/


原文地址:http://blog.csdn.net/rolandman_/article/details/43730623

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章