天天看點

Swift中Optioanl的?& !解析Optional的?or !

Optional的?or !

1、聲明為Optiopnal(?)

  • Optional的本質是枚舉enum:它可以有值,也可以沒值(nil);
  • 聲明為Optional,隻需要在類型的後面緊跟

  • 當Optional沒有值時,将傳回nil;
  • 當Optional有值時,将進行拆封取值(unwrap),然後對拆包後的值執行後面的操作;

2、聲明為非Optiopnal(!)

  • 使用感歎号!表示拆封取值(表示I am sure it has a value);
  • 強制認為有值,如果為nil時則會觸發運作時錯誤(Compile找不到你說的那個value);

你可以這麼認為:

1、Optional中有兩個值,可能為none,也可能為其它值;

2、

代表當你不确定類型值是否為空,是以值為none時傳回nil;不為none時傳回Optional中的值;

3、

代表你确定類型中一定會有值,是以值為none的時,運作會報錯;不為none時傳回Optional的值;

3、定義:那我們來看一下Optional的本質:

Optional類型變量的真實值是被封裝起來的,包裝在其枚舉值Some中;

enum Optional<T> : LogicValue, Reflectable {
    case None
    case Some(T)
    init()
    init(_ some: T)

    /// Allow use in a Boolean context.
    func getLogicValue() -> Bool

    /// Haskell's fmap, which was mis-named
    func map<U>(f: (T) -> U) -> U?
    func getMirror() -> Mirror
}           

4、差別:Optional 和 非Optional

在聲明一個Optional類型變量時如果沒有賦初始值,那麼預設為nil;

//未被初始化,但是是一個Optional類型,為nil
var str: String?
str //輸出nil

//未被初始化,也不是Optional類型
var str2: String
str2    //使用時出錯           

除了基礎的Optional含義,還有Optional Chaining 與 Optional Binding,這些的話,就另外寫文章來說啦;

或者可以到Swift開發者頁面:

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html