scribble

Leon's scribble.

About Email GitHub

09 Sep 2015
Swift 学习笔记:可选类型和强制解析

swift

 

可选类型

可选类型这个概念初看起来有点难理解,先看一个例子:

var str1: String;
println(str1); // 报错

上述代码运行会报错 Variable 'str1' used before being initialized,变量未初始化就被使用了。

Swift 中声明变量时必须指定值,假如一开始并不能确定变量的值,这时就可以声明变量为一个可选类型。

var str1: String?
println(str1); // nil

上面代码中,表示 str1 要么是一个字符串,要么是 nil,且只会有这两种情况。nil 不是指针,而是用来表示 值缺失,放在 JS 中,可以理解为 null 或 undefined。

如果不给可选类型的变量或常量赋值,则默认会设置为 nil,也可以显式地赋值为 nil:

var str1: String?
str1 = nil;

? 号必须写在类型后面 Int?var str1? 是不合法的。

nil 用在 if 语句中:

if str1 != nil {
    println("A string: \(str1!)")
}

// str1! 表示明确知道 str1 有值,这个取值过程称为强制解析

强制解析

可选类型的常量或变量,必须用 ! 来取值:

let str2: String? = "haha";
let forcestr2: String = str2! // 要加感叹号

还有一种可选类型叫 隐式可选类型,区别只是把类型后面的 ? 改成 !,这时取值就不需要在后面加 ! 号了:

let str2: String! = "haha";
let forcestr2: String = str2 // 不需要加感叹号

注意:如果变量有可能会变成 nil 的,不要使用隐式可选类型(!),要用普通可选类型(?)。


Til next time,
Leon at 23:48

scribble

About Email GitHub