加深理解Optional

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。
(待续)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对各种值为"空"的情况处理不当,几乎是所有Bug的来源。 在我们的例子里,尽管tmp的值是nil,但调用tmp的r...
    AKyS佐毅阅读 10,566评论 1 13
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,814评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,014评论 19 139
  • 01-常量与变量 学习swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔阅读 5,237评论 2 19
  • 1.元组 1.1什么是元组 在其他语言中很早就有元组这个概念, 但是对于OC程序员来说这是一个新的概念官方定义:元...
    高俊阅读 447评论 0 0