Swift学习笔记之Optional

Swift学习笔记之Optional_第1张图片
Swift.png

前言

最近要做一个Swift开发的app,之前一直在用Objective-C做开发,其实早就想试试Swift开发了,就借此机会学习一下Swift。再说一句,我是看着斯坦福大学的iOS课程,也就是白胡子老爷爷讲的,话说老爷子讲的真的不错。视频、PDF文件在iTunse U 上面都有,有兴趣的可以去下载学习。

Optional

在刚开始接触Swift的时候经常看到变量后面跟着 ? 或者 !
那我们是怎么用Optional的呢?

let x: String? = "hello world" //这是一个Optional类型的常量,它可能是String类型的,也可能是none。

因为 An Optional is just an enum

enum Optional { // T 泛型 指明Optional可能的类型, 上面的Optional就可能是String类型的
        case none  //另外注意一点的是,在Swift 3 中enum 中的元素首字母都变成小写的, 之前都是大写的。
        case some(T) 
}

所以说

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

等于

let x = Optional.none
let y = Optional.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 { .... }

这里当display为空的时候, 就直接返回nil, 不会去执行后面的text,当text为空返回nil,不会去管后面的事情。(这里解释的不是很清楚, 希望有更好的解释)!

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
    使用 ! 来强制拆包(Unwrapping)
var x: String = .none
x = "hello world"
let str = x!.hashValue

当你确定instance of Optional 一定包含值的时候才可以强制拆包


Swift学习笔记之Optional_第2张图片
Unconditional Unwrapping.png
Unwrapping.png

当强制拆包时,值为空的时候就会报错。


屏幕快照 2016-11-12 下午2.36.34.png

你可能感兴趣的:(Swift学习笔记之Optional)