swift 注意事项 (十六) —— 可选链
生活随笔
收集整理的這篇文章主要介紹了
swift 注意事项 (十六) —— 可选链
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
可選鏈(Optional Chaining) 我們都知道“可選型”是什么。那么可選鏈又是什么,舉個(gè)樣例解釋一下:
struct MyName{ var name }
struct MyInfo { var myName:MyName??= MyName() }
class MyClass { var structInstance: MyInfo??= MyInfo() }
這里有兩個(gè)結(jié)構(gòu)體和一個(gè)類,當(dāng)。這個(gè)類實(shí)例化的時(shí)候: var myInstance = MyClass() 全部的可選屬性都會被初始化,由于我寫了默認(rèn)值。
if let name =?myInstance.info?.myName?.name?{(感謝 swift技術(shù)交流第一平臺(355277)的群友 周老濕(974871365) 指出成員名錯(cuò)誤)
if let name =?myInstance.structInstance?.myName?
在紅字部分,能夠看到,是使用的一連串的可選值。
這是由于:在可選鏈中,不論什么一個(gè)環(huán)節(jié)的可選型解析失敗(值為nil),那么整個(gè)可選鏈的結(jié)果為nil。
當(dāng)然,事實(shí)上我們可能會想在第一個(gè)環(huán)節(jié)使用“!”來讓可選鏈返回一個(gè)確切的值,而不是可選值,比方: let name = myInstance.info!.myName!.name 但,大多數(shù)情況,我們并不知道有誰會來改代碼。有誰會改變某個(gè)封裝的實(shí)現(xiàn)。假設(shè)錯(cuò)誤的解析了一個(gè)可選值的話(一個(gè)值為nil的可選型),那么帶來的后果僅僅有一個(gè),我們的程序會崩掉。。。
這章就說了這么點(diǎn)事兒。。
struct MyName{ var name }
struct MyInfo { var myName:MyName??= MyName() }
class MyClass { var structInstance: MyInfo??= MyInfo() }
這里有兩個(gè)結(jié)構(gòu)體和一個(gè)類,當(dāng)。這個(gè)類實(shí)例化的時(shí)候: var myInstance = MyClass() 全部的可選屬性都會被初始化,由于我寫了默認(rèn)值。
if let name =?myInstance.info?.myName?.name?{(感謝 swift技術(shù)交流第一平臺(355277)的群友 周老濕(974871365) 指出成員名錯(cuò)誤)
if let name =?myInstance.structInstance?.myName?
.name
?{ println(name) } else { println(“some info is nil") }在紅字部分,能夠看到,是使用的一連串的可選值。
這就叫做可選鏈。
這里我還使用了一個(gè)非常早的筆記中提到的 ?if let name = 可選型 {……} 這種語法。這是由于:在可選鏈中,不論什么一個(gè)環(huán)節(jié)的可選型解析失敗(值為nil),那么整個(gè)可選鏈的結(jié)果為nil。
當(dāng)然,事實(shí)上我們可能會想在第一個(gè)環(huán)節(jié)使用“!”來讓可選鏈返回一個(gè)確切的值,而不是可選值,比方: let name = myInstance.info!.myName!.name 但,大多數(shù)情況,我們并不知道有誰會來改代碼。有誰會改變某個(gè)封裝的實(shí)現(xiàn)。假設(shè)錯(cuò)誤的解析了一個(gè)可選值的話(一個(gè)值為nil的可選型),那么帶來的后果僅僅有一個(gè),我們的程序會崩掉。。。
。所以,千萬不要這么干!
!。!
!
這章就說了這么點(diǎn)事兒。。
。。
至于什么調(diào)用函數(shù),使用下標(biāo),不須要再說了,邏輯能力正常的人類。都直接就會用了。
版權(quán)聲明:本文博主原創(chuàng)文章,博客,未經(jīng)同意不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的swift 注意事项 (十六) —— 可选链的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpriteBuilder中关于大量CC
- 下一篇: zabbix应用之短信报警