加深理解Optional

作者: 铁围山 | 来源:发表于2016-10-18 09:34 被阅读126次

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

相关文章

  • 加深理解Optional

    Swift语言很重要的一个特征就是加入了Optional,刚接触时Optional的理解就是一个可能为nil的变量...

  • 重构加深理解

    突破 何为突破,DDD的实践过程是渐进式的。你的重构与回报不是呈线性关系的。通常会在具体的某个点会出现一个飞跃。这...

  • leetcode 102. 二叉树的层次遍历

    加深理解。

  • DCG的加深理解

    具体运行结果大家可以写写看看,我总结一下自己的理解。 同步操作:都不会开启新的线程,所有操作都在当前主线程中完成,...

  • 分类可以加深理解

    大家可能注意到过,我们国家是有核心价值观的,想一想是很多二字词语的组合,只是这个价值观字数比较多,难以方便的记住。...

  • 顺势学习,加深理解

    风娃娃教学反思 《风娃娃》是人教版二年级上册的一篇浅显易懂的优美的童话故事,语言生动活泼 ,富有儿童情趣,。我 采...

  • 用Optional取代null

    创建Optional对象 Optional.empty():声明一个空Optional Optional.of()...

  • Swift基础_06可选类型

    可选类型(Optional) Optional Optional是Swift中的可选类型 Optional 包括两...

  • JAVA Optional类

    jdk8 [理解、学习与使用 Java 中的 Optional] https://www.oschina.net/...

  • WebRTC加深理解 - 会话流程

    基于ios native api自己写客户端得出的大概流程,WebRTC的API接口和例子都是oc版本,因为我最讨...

网友评论

    本文标题:加深理解Optional

    本文链接:https://www.haomeiwen.com/subject/yxczyttx.html