Swift學習筆記之-Implicitly unwrapped optionals
Implicitly unwrapped optionals:
// an implicitly unwrapped optional variable
varmaybeString:String!maybeString=nilmaybeString="fish"
// methods invoked directly, failing at runtime// if the optional is nil
ifmaybeString.hasPrefix("f") {
println("maybeString starts with 'f'")
}else{
println("maybeString does not start with an 'f'")
}
Tips:
•Implicitly unwrapped optionals are useful in classes and structs where you won’t
have a property’s value available in the initializer, but will have a value later
before it is used.
•Remember, implicitly unwrapped optionals are still optionals – use with them with
care since they remove a bit of safety around nil values!
隱式解析可選
如上所述,可選暗示了常量或者變數可以“沒有值”。可選可以通過if語句來判斷是否有值,如果有值的話可以通過可選繫結來解析值。
有時候在程式架構中,第一次被賦值之後,可以確定一個可選總會有值。在這種情況下,每次都要判斷和解析可選值是非常低效的,因為可以確定它總會有值。
這種型別的可選被定義為隱式解析可選(implicitly unwrapped optionals)。把想要用作可選的型別的後面的問號(String?)改成感嘆號(String!)來宣告一個隱式解析可選。
當可選被第一次賦值之後就可以確定之後一直有值的時候,隱式解析可選非常有用。隱式解析可選主要被用在 Swift 中類的構造過程中,請參考類例項之間的迴圈強引用。
一個隱式解析可選其實就是一個普通的可選,但是可以被當做非可選來使用,並不需要每次都使用解析來獲取可選值。下面的例子展示了可選String和隱式解析可選String之間的區別:
let possibleString: String? ="An optional string."
println(possibleString!)// 需要驚歎號來獲取值
// 輸出 "An optional string."
let assumedString: String! ="An implicitly unwrapped optional string."
println(assumedString)// 不需要感嘆號
// 輸出 "An implicitly unwrapped optional string."
你可以把隱式解析可選當做一個可以自動解析的可選。你要做的只是宣告的時候把感嘆號放到型別的結尾,而不是每次取值的可選名字的結尾。
注意:如果你在隱式解析可選沒有值的時候嘗試取值,會觸發執行時錯誤。和你在沒有值的普通可選後面加一個驚歎號一樣。
你仍然可以把隱式解析可選當做普通可選來判斷它是否包含值:
if assumedString {
println(assumedString)
}
// 輸出 "An implicitly unwrapped optional string."
你也可以在可選繫結中使用隱式解析可選來檢查並解析它的值:
if let definiteString = assumedString {
println(definiteString)
}
// 輸出 "An implicitly unwrapped optional string."
注意:如果一個變數之後可能變成nil的話請不要使用隱式解析可選。如果你需要在變數的生命週期中判斷是否是nil的話,請使用普通可選型別。
相關文章
- swift 學習筆記之陣列Swift筆記陣列
- swift學習筆記《1》Swift筆記
- swift學習筆記《4》Swift筆記
- swift學習筆記《2》-swift語法Swift筆記
- swift學習筆記《3》-技巧Swift筆記
- Swift進階學習筆記Swift筆記
- swift學習筆記《5》- 實用Swift筆記
- swift 關於 toolbar 學習筆記Swift筆記
- iOS學習筆記43 Swift(三)類iOS筆記Swift
- Swift學習筆記(二十一)——字典Swift筆記
- Swift學習筆記(二十三)——Swift泛型初識Swift筆記泛型
- 《從零開始學Swift》學習筆記(Day 56)—— Swift編碼規範之命名規範Swift筆記
- 《從零開始學Swift》學習筆記(Day 3)——Swift 2.0之後增加的關鍵字Swift筆記
- iOS學習筆記47 Swift(七)泛型iOS筆記Swift泛型
- iOS學習筆記49 Swift(九)訪問控制iOS筆記Swift
- Swift學習筆記第四篇(函式)Swift筆記函式
- swift學習筆記4——擴充套件、協議Swift筆記套件協議
- Swift學習筆記(三十二)——可變引數Swift筆記
- Swift學習筆記(三十四)——函式型別Swift筆記函式型別
- Swift學習筆記(二十)——陣列的基本操作Swift筆記陣列
- Swift學習筆記(二十六)——擴充套件Swift筆記套件
- Swift學習筆記(八)--析構器與ARCSwift筆記
- swift學習記錄Swift
- 《從零開始學Swift》學習筆記(Day 17)——Swift中陣列集合Swift筆記陣列
- node學習筆記之39筆記
- 學習筆記之測試筆記
- Swoft 學習筆記之配置筆記
- Boltdb學習筆記之〇--概述筆記
- flask學習筆記之blueprintFlask筆記
- JS學習筆記之this指向JS筆記
- Java學習筆記之staticJava筆記
- oracle之awr學習筆記Oracle筆記
- ReactiveCocoa - swift 學習筆記(二)初識SignalReactSwift筆記
- Swift學習筆記(二十二)——字典的基本操作Swift筆記
- Swift學習筆記(二十五)——迴圈結構Swift筆記
- 《從零開始學Swift》學習筆記(Day 24)——列舉Swift筆記
- 《從零開始學Swift》學習筆記(Day 16)——字典集合Swift筆記
- Swift學習日記--二Swift