swift远征~可选型

可选型(optional)是swift中一个非常重要的概念,它使这个语言变得更加安全,在编译时就能有效规避许多实例为空的错误。

在swift中,表示一个实例为空只有一种方式,就是nil,而一般情况下的实例是不能够被赋予nil的,除非将它定义为可选型

写法

var optionalStr : String? = nil

在数据类型后面加上一个?即表示该类型为可选型,因此我们可以在初始化的时候赋予nil。

强制解包(forced unwrapping)

由于swift是一种强类型语言,当可选型与非可选型运算或者赋值之前需要对可选型进行转化,即强制解包

var optionalStr : String? = nil
optionalStr = "optionalStr"
let str5 : String = optionalStr!

在可选型实例后面加上一个!即表示对它强制解包,此时它被认为是一个非空的实例,但此处需要我们确保它为非空,否则会出现为空的错误。

隐式强制解包的可选型

var optionalStr : String! = nil
optionalStr = "optionalStr"
let str5 : String = optionalStr

我们在使用这种可选型时不再需要每次都显式的使用解包符,但同样的,必须要由我们自己保证它是非空的,否则程序会出错。

可选型实例绑定(optional binding)

var optionalStr : String? = nil
optionalStr = "optionalStr"
if let str5 = optionalStr{
    print(str5)
} else {
    print("optionalStr is nil")
}

这是一种更加安全的解包方式,如果此时optionalStr为空,那么将不会进入if的代码块,因此无论如何也不会出现为空错误。可以在if后面绑定多个可选型实例,或是添加额外的判断条件,使用逗号分隔。

var optionalStr : String? = nil
var optionalStr1 : String? = nil
optionalStr = "optionalStr"
if let str5 = optionalStr, let str6 = optionalStr1{
    print(str5+str6)
} else {
    print("optionalStr or optionalStr1 is nil")
}

可选型的链式调用(optional chaining)

var optionalStr : String? = nil
optionalStr?.append("star")

在对可选型实例进行链式调用时,加上一个?,这样当实例不为空时才会继续向下调用,否则返回一个nil,因此这种链式调用的返回值也会是一个可选型。

此处也可以用!代替?,这种写法意味着无论可选型实例是否为空都会继续调用,因此并不推荐用这种写法。

nil合并运算符

var optionalStr : String? = nil
optionalStr?.append("star")
print(optionalStr ?? "optionalStr is nil")          //"optionalStr is nil\n"

在可选型后使用??运算符,然后接一个值,代表在可选型实例为空时使用这个值。这也是一种解包方式,如果是在为空时只需要为实例赋一个默认值,那么这种写法是最简洁的。

本篇到此为止,希望这对你有帮助,如果有错误或是有需要补充的地方,望告知。


种一棵树最好的时间是在十年前,而后是现在。

Loading Disqus comments...
Table of Contents