由于直接抱着对其他语言的认识来使用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.") }