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學習筆記《1》Swift筆記
- swift學習筆記《4》Swift筆記
- swift學習筆記《2》-swift語法Swift筆記
- swift學習筆記《3》-技巧Swift筆記
- Swift進階學習筆記Swift筆記
- swift學習筆記《5》- 實用Swift筆記
- iOS學習筆記43 Swift(三)類iOS筆記Swift
- iOS學習筆記47 Swift(七)泛型iOS筆記Swift泛型
- iOS學習筆記49 Swift(九)訪問控制iOS筆記Swift
- 學習筆記之測試筆記
- JS學習筆記之this指向JS筆記
- flask學習筆記之blueprintFlask筆記
- Swoft 學習筆記之配置筆記
- 學習筆記:DOM之appendChild筆記APP
- node學習筆記之39筆記
- Web之http學習筆記WebHTTP筆記
- Netty學習筆記之ChannelHandlerNetty筆記
- Pytorch學習筆記之tensorboardPyTorch筆記ORB
- Boltdb學習筆記之〇--概述筆記
- Swift筆記之變數講解Swift筆記變數
- swift演算法練習筆記Swift演算法筆記
- iOS學習筆記42 Swift(二)函式和閉包iOS筆記Swift函式
- Vue(1)之—— Vuex學習筆記Vue筆記
- 《筆記》之學習高併發筆記
- Laravel 學習筆記之 request validationLaravel筆記
- ReactNative學習筆記九之TabNavigatorReact筆記
- Python學習筆記|Python之程式Python筆記
- Golang學習筆記之方法(method)Golang筆記
- ReactNative學習筆記十一之FlatListReact筆記
- swoft 學習筆記之 response 篇筆記
- hive學習筆記之八:SqoopHive筆記OOP
- InstalMaterial學習筆記之Reveal效果筆記
- JVM學習筆記之棧區JVM筆記
- hive學習筆記之十一:UDTFHive筆記
- robot framework學習筆記之九-雜記Framework筆記
- iOS學習筆記44 Swift(四)列舉和結構體iOS筆記Swift結構體
- swift dispatch 筆記Swift筆記
- numpy的學習筆記\pandas學習筆記筆記
- MySQL優化學習筆記之explainMySql優化筆記AI