Swift语言很重要的一个特征就是加入了Optional,刚接触时Optional的理解就是一个可能为nil的变量,定义的时候语句结尾加个?,使用的时候加个!解包。很多时候都是xcode自动补全的,随着使用的增多,遇到了各种各样的坑,才对Optional这个东西有了深入一点的理解,也明白了它到底是干什么用的。
看下面一段代码:
var nothing:String?
func testOptional(str:String?){
if str == nil {
return
}
print(str)
}
testOptional(nothing!)
运行结果"fatal error: unexpectedly found nil while unwrapping an Optional value"
这是因为在swift语言中,变量是不能为nil的。这是这个语言最大的特点。定义的时候如果给一个变量赋初始值为nil,编译都不会通过。运行的时候如果一个变量的值为nil,程序就会"fatal error: unexpectedly found nil while unwrapping an Optional value"。所以我们在写方法的时候对参数的检测是能是检测Optional的参数是不是nil,如果这个Optional参数传入的时候已经解包,那么就没有检测的机会了,运行时只要发现参数为nil直接就fatal error了,不会进到函数内部。
所以正确的调用方式如下:
<code>testOptional(nothing)</code>
因为在方法testOptional内部要做参数检查,所以传入的参数必须是Optional的而不是解包后的值。
结论1. Swift中只有Optional的值可能为nil,如果非Optional的值为nil则会抛出fatal error。
(待续)