6.4 問號(hào)?和感嘆號(hào)!的用法解析 [Swift教程]

1. 和別的語言不同,系統(tǒng)不會(huì)自動(dòng)給變量設(shè)置初始值,也就是說變量不會(huì)有默認(rèn)值。所以在使用變量之前需要進(jìn)行初始化,否則就會(huì)出錯(cuò)。

2. 利用泛型定義一個(gè)Optional類型的變量,從右側(cè)可以看出,它是空值,沒有初始值。Optional其實(shí)是個(gè)枚舉,里面有None和Some兩種類型,用來包裝原始值。

3. 定義一個(gè)可選類型的字符串變量,從右側(cè)的結(jié)果可以看出,它的值也是空值。

4. 定義一個(gè)字符串類型的變量。

5. 由于該變量的值為空,所以出現(xiàn)錯(cuò)誤提示,需要對(duì)變量進(jìn)行初始化操作。接著對(duì)這兩行代碼進(jìn)行修改。

6. 兩行代碼各增加了一個(gè)問號(hào)。前一個(gè)問號(hào)的作用是聲明一個(gè)Optional變量,后一個(gè)問號(hào)的作用是,在對(duì)Optional值操作時(shí),判斷是否可以響應(yīng)后面的操作。

7. 因?yàn)樽兞康闹禐榭?,所以無法執(zhí)行第14行代碼中的第一個(gè)問號(hào)后面的代碼。此時(shí)雙問號(hào)就發(fā)揮了作用,當(dāng)前面的代碼無法執(zhí)行時(shí),就采用雙問號(hào)后面的值。

8. 將第17行中的第一個(gè)問號(hào),修改為感嘆號(hào),此時(shí)也出現(xiàn)了錯(cuò)誤提示,這是因?yàn)楦袊@號(hào)會(huì)對(duì)左側(cè)的Optional值進(jìn)行拆包(從枚舉里面取出來原始值)。

9. 繼續(xù)定義一個(gè)可選變量。

10. 這次我們給這個(gè)變量賦予一個(gè)初始值。

11. 此時(shí)再使用感嘆號(hào),對(duì)被Optional包裹的變量進(jìn)行拆包,現(xiàn)在已經(jīng)可以在右側(cè)正常顯示它的值了,并且沒有被Optional包裹。

12. 如果將感嘆號(hào)更改為問號(hào),也可以正常獲取它的值,但是因?yàn)闆]有拆包的原因,所以它的值會(huì)被Optional包裹。

13. 如果一定要使用問號(hào),也可以給它補(bǔ)充一個(gè)默認(rèn)值,點(diǎn)擊此處的修復(fù)按鈕,添加一個(gè)默認(rèn)值。

14. 此時(shí)會(huì)出現(xiàn)一對(duì)問號(hào),然后在問號(hào)的后方輸入當(dāng)變量的值為空時(shí),選用該默認(rèn)值。

15. 此時(shí)右側(cè)可以正常顯示結(jié)果了。

16. 傳統(tǒng)的空值判斷,通常要使用if語句,代碼量比較大,而使用問號(hào)和感嘆號(hào),則可以很簡潔的進(jìn)行空值的判斷。下面就是一個(gè)空值判斷的示例。

17. 此時(shí)已經(jīng)定義了兩個(gè)類,并給兩個(gè)類都添加一個(gè)Optional屬性。

18. 繼續(xù)給第二個(gè)類添加一個(gè)寵物類Optional屬性。

19. 初始化第二個(gè)類的實(shí)例對(duì)象。

20. 打印該對(duì)象的寵物屬性,因?yàn)樵搶傩詻]有初始值,所以在本行代碼的右側(cè)實(shí)時(shí)反饋區(qū),顯示它的值為空。

21. 如果需要訪問寵物屬性的名稱屬性,則在寵物屬性之后添加一個(gè)問號(hào),然后再訪問名稱屬性,這樣當(dāng)寵物屬性的值為空時(shí),直接返回空值,不再嘗試獲取名稱屬性。

22. 這樣使用一行代碼,就完成了通常需要使用多行if語句進(jìn)行空值判斷的功能。接著對(duì)寵物屬性進(jìn)行初始化。

23. 打印該對(duì)象的寵物屬性,因?yàn)樵搶傩砸呀?jīng)擁有初始值,所以在本行代碼的右側(cè)實(shí)時(shí)反饋區(qū),顯示了它當(dāng)前的值。

24. 接著使用相同的方式,獲取寵物的名稱屬性,因?yàn)槊Q屬性沒有初始值,所以右側(cè)顯示的結(jié)果為空。

25. 給寵物的名稱屬性設(shè)置一個(gè)值。

26. 最后再嘗試獲取寵物的名稱屬性時(shí),右側(cè)的實(shí)時(shí)反饋區(qū)已經(jīng)能夠正常顯示名稱屬性的值了。

本文整理自:《Swift4互動(dòng)教程》,真正的[手把手]教學(xué)模式,用最快的速度上手iOS開發(fā)和Swift語言,蘋果商店App Store免費(fèi)下載:https://itunes.apple.com/cn/app/id1320746678,或掃描本頁底部的二維碼。課程配套素材下載地址:資料下載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基礎(chǔ)部分(The Basics) 當(dāng)推斷浮點(diǎn)數(shù)的類型時(shí),Swift 總是會(huì)選擇Double而不是Float。 結(jié)合...
    gamper閱讀 1,496評(píng)論 0 7
  • 參考資源《swifter》https://github.com/iOS-Swift-Developers/Swif...
    柯浩然閱讀 1,536評(píng)論 0 6
  • 官方文檔 初始化 Initialization是為準(zhǔn)備使用類,結(jié)構(gòu)體或者枚舉實(shí)例的一個(gè)過程。這個(gè)過程涉及了在實(shí)例里...
    hrscy閱讀 1,202評(píng)論 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,197評(píng)論 1 10
  • 不到荊州,怎知荊州. 城外驛亭孤客,疏落晚風(fēng)中. 高樓臺(tái)上,胡琴聲里,弦催人斷腸. 對(duì)月飲鳩幾盞,眉梢卻微涼. 風(fēng)...
    宏祥君的詩和遠(yuǎn)方閱讀 110評(píng)論 0 0

友情鏈接更多精彩內(nèi)容