
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, andswitch來拆包
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