Swift中的Optional值有這樣的特性,當(dāng)對其進行可選拆包時,即使用?進行Optional類型值的取值時,如果Optional值不為nil,則會返回原始類型的數(shù)據(jù)值,如果為nil,則會返回nil。因此,當(dāng)使用?對Optional拆包后進行方法、屬性或者下標(biāo)的調(diào)用時,如果有值,則會成功相應(yīng)調(diào)用,如果沒有值,則會調(diào)用失敗,返回nil。
注意:使用!則會進行強制拆包,這時如果Optional值為nil,則會出現(xiàn)運行時錯誤,因此開發(fā)者在使用!進行強制拆包時,必須確認Optional類型值不為nil。
當(dāng)對可選值進行可選拆包并調(diào)用其屬性或方法后,無論原屬性或者方法返回值是什么類型的,都會被包裝成Optional值類型。當(dāng)使用?對一個Optional值進行拆包并調(diào)用其方法時,方法的返回值一會被包裝為Optional類型,示例如下:
class Myclass { var cls:MyClassTwo? }class MyClassTwo { func run() -> String { return "run" }}let obj:Myclass = Myclass()//將返回nilobj.cls?.run()
在進行Optional鏈調(diào)用的時候,會遵守如下一些特性:
1.如果進行?拆包Optional值的屬性或者方法返回值原來為非Optional值,則會包裝成Optional值。
2.如果進行?拆包Optional值的屬性或者方法返回值原來為Optional值,則依然會返回Optional值,并且并不會進行Optional值類型的嵌套。
3.由于使用Optional值?可選拆包時會將其屬性和方法的返回值都包裝成Optional類型的,因此使用?可以進行Optional鏈?zhǔn)秸{(diào)用,這其間,有一個環(huán)節(jié)調(diào)用失敗,整個鏈都會返回nil。
示例如下:
let obj:Myclass = Myclass()//將返回nil(obj.cls?.run())?.startIndex
新聞熱點
疑難解答
圖片精選