由于直接抱着对其他语言的认识来使用swift,这个问题苦恼了我很久,当我用关键词“swift 空指针”搜索也没有得到有用信息,直到我发现swift一定要对可能为空的变量做标记——Optional(?&!)。

Optional Chaining(可选类型)

https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html

在C和Objective-C中不存在可选类型,可以也只能用传统方式处理空值,Swift引入可选类型专为处理值可能为空的情况。

声明

声明变量时后面加上?或!,他们的主要区别是用?更优雅。。。

The main difference is that optional chaining fails gracefully when the optional is nil, whereas forced unwrapping triggers a runtime error when the optional is nil.

传值

用!声明Optional变量意味着ta总是被forced unwraping(强制解析):传值时不用加!,如果运行中访问没有值的变量,程序就会崩溃。

用?声明的Optional变量在传值时有两种选择:使用时后面加??提供默认值以替代值可能为nil的情况,或者使用的时候后面加上!,那么情况就和上文一样了。

拓展

判断Optional变量是否为空,可以用if:

if var1 = nil{}

也可以申请一个局部变量(这里假设property1是Optional变量):

if let var1 = obj1.property1? {
    print("\(var1) exists.")
} else {
    print("Nothing.")
}