Swift 中的可選型

什么是可選型(Optional)

先從一個例子看起

var age: Int = 35
var height:Int = 180

上面定義了兩個變量,都是Int型,數(shù)值分別為35180,但是不能給這兩個變量賦值nil。這樣就需要可選型了(Optional)。
可選型其實是枚舉類型(enum)

enum Optional : NilLiteralConvertible{
    case None
    case Some(T)
}

Optional<Int>的值是nil或者Int

在下面的代碼中聲明了兩個可選型變量。?表示是一個可選型

var age:Int? = nil
var height:Int? = 180

以height為例:與下面的代碼是等效的。
var height:Optional<Int> = Optional <Int>(180)

什么時候使用? !

假定有一個基于UIKit 的iPhone App,在view controller中有一些代碼可以把新的view controller 弄到前一個view controller上面并把它呈現(xiàn)在屏幕上,通過navigation controller把它push出來。

正如你知道的那樣,每一個ViewController的實例都有一個property叫做navigationController。但是如果你創(chuàng)建的是基于navigation controller的程序,那么你的master view controller中的該property已經(jīng)是被自動的設(shè)置好了。如果你使用的是single app 模板創(chuàng)建的程序,那么該property并沒有被自動的設(shè)置,所以你的app的默認(rèn)的view controller并沒有任何東西存儲在他名為navigationControllerproperty中。

那么該情況下,使用可選型就比較合適了,
先看一下UIViewController的定義

var navigationController:UINavigationController? {get}

如果你確定知道view controllernavigation controller不會為nil,那么你可以通過!來強制解包

controller.navigationController!.pushViewController(myViewController, animated:true)

!: 當(dāng)把!放到一個變量后面,你通知編譯器你根本不關(guān)心這個類型是可選型,你明確知道執(zhí)行到這一句的時候,這個變量一定是有值,不會是nil。(當(dāng)navigationController不知道為什么是nil的時候,執(zhí)行就會crash,所以當(dāng)你百分之百確定的時候使用!

當(dāng)你不是很明確的時候,就使用?

controller.navigationController?.pushViewController(myViewController, animated:true)

? 當(dāng)吧?放到一個變量后面的時候,你其實不是很明確是否改變量是nil還是有值的。所以上面的意思就是:當(dāng)navigationController有值的時候,就接著執(zhí)行后面,否則就相當(dāng)于nil。等價于

if(controller.navigationController){
    controller.navigationController.pushViewController(myViewController, animated:true)
}

但是問題來了,我想當(dāng)他是nil的時候執(zhí)行別的代碼的時候。if let就應(yīng)運而生了
if let :針對上面的疑問,可以這么寫

if let nav = controller.navigationController{
    nav.pushViewController(myViewController,animated:true)
} else {
    隨便干點啥
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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