可選類型(?)
/*
這個值要麼存在, 並且等於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