Swift學(xué)習(xí)筆記之Optional

Swift.png

前言

最近要做一個(gè)Swift開發(fā)的app,之前一直在用Objective-C做開發(fā),其實(shí)早就想試試Swift開發(fā)了,就借此機(jī)會(huì)學(xué)習(xí)一下Swift。再說一句,我是看著斯坦福大學(xué)的iOS課程,也就是白胡子老爺爺講的,話說老爺子講的真的不錯(cuò)。視頻、PDF文件在iTunse U 上面都有,有興趣的可以去下載學(xué)習(xí)。

Optional

在剛開始接觸Swift的時(shí)候經(jīng)常看到變量后面跟著 ? 或者 !
那我們是怎么用Optional的呢?

let x: String? = "hello world" //這是一個(gè)Optional類型的常量,它可能是String類型的,也可能是none。

因?yàn)?An Optional is just an enum

enum Optional<T> { // T 泛型 指明Optional可能的類型, 上面的Optional就可能是String類型的
        case none  //另外注意一點(diǎn)的是,在Swift 3 中enum 中的元素首字母都變成小寫的, 之前都是大寫的。
        case some(T) 
}

所以說

let x: String? = nil
let y: String? = "hello world"

等于

let x = Optional<String>.none
let y = Optional<String>.some("hello world")
Optional.png

Optionals can be "chained"

var display: UILable?
if let lable = display {
        if let text = lable.text {
            let x = text.hashValue
            .......
       }
}

等于

if let x = display?.text?.hashValue { .... }

這里當(dāng)display為空的時(shí)候, 就直接返回nil, 不會(huì)去執(zhí)行后面的text,當(dāng)text為空返回nil,不會(huì)去管后面的事情。(這里解釋的不是很清楚, 希望有更好的解釋)!

Optionals can be "chained" .png

There is also an Optional "defaulting" operator ??

There is also an Optional "defaulting" operator.png

Optional Unwrapping

  • Optional Binding
    使用 if let , guard let , and switch 來拆包
let x: String? = "hello World"
if let str = x {
       print(str)
}
  • Unconditional Unwrapping
    使用 ! 來強(qiáng)制拆包(Unwrapping)
var x: String = .none
x = "hello world"
let str = x!.hashValue

當(dāng)你確定instance of Optional 一定包含值的時(shí)候才可以強(qiáng)制拆包


Unconditional Unwrapping.png
Unwrapping.png

當(dāng)強(qiáng)制拆包時(shí),值為空的時(shí)候就會(huì)報(bào)錯(cuò)。


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

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

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