Swift中的Optional值有這樣的特性,當對其進行可選拆包時,即便用?進行Optional類型值的取值時,若是Optional值不爲nil,則會返回原始類型的數據值,若是爲nil,則會返回nil。所以,當使用?對Optional拆包後進行方法、屬性或者下標的調用時,若是有值,則會成功相應調用,若是沒有值,則會調用失敗,返回nil。javascript
注意:使用!則會進行強制拆包,這時若是Optional值爲nil,則會出現運行時錯誤,所以開發者在使用!進行強制拆包時,必須確認Optional類型值不爲nil。java
當對可選值進行可選拆包並調用其屬性或方法後,不管原屬性或者方法返回值是什麼類型的,都會被包裝成Optional值類型。當使用?對一個Optional值進行拆包並調用其方法時,方法的返回值一會被包裝爲Optional類型,示例以下:spa
class Myclass { var cls:MyClassTwo? } class MyClassTwo { func run() -> String { return "run" } } let obj:Myclass = Myclass() //將返回nil obj.cls?.run()
在進行Optional鏈調用的時候,會遵照以下一些特性:code
1.若是進行?拆包Optional值的屬性或者方法返回值原來爲非Optional值,則會包裝成Optional值。ip
2.若是進行?拆包Optional值的屬性或者方法返回值原來爲Optional值,則依然會返回Optional值,而且並不會進行Optional值類型的嵌套。開發
3.因爲使用Optional值?可選拆包時會將其屬性和方法的返回值都包裝成Optional類型的,所以使用?能夠進行Optional鏈式調用,這其間,有一個環節調用失敗,整個鏈都會返回nil。示例以下:io
let obj:Myclass = Myclass() //將返回nil (obj.cls?.run())?.startIndex
專一技術,熱愛生活,交流技術,也作朋友。class
——琿少 QQ羣:203317592方法