swift中,Optional、?与!之间的关系

swift中,Optional、?与!之间的关系

 

Optional <ClassName> 与 ClassName? 等价

 

 

 

对 ClassName! 强制取值会导致崩溃(如果对象为nil时候,取值就会崩溃)

 

 

 

imageView!.image 是对 imageView 强制解包, imageView.image! 则是对 image 的强制解包, 如果解包后发现为nil, 则崩溃

 

 

除了 ! 与 ? , 还存在一种叫 NilLiteralConvertible 的东东

 

'?' must be followed by a call, member lookup, or subscript

 

 

小结

1. 使用问号?的对象允许出现nil,使用感叹号!的对象出现nil就会崩溃

2. 使用问号?的场景都要求对象的右边有内容,声明的时候除外

3. 可以将问号?与感叹号!理解为拆包操作,?支持包为空,而!则在包为空时崩溃

 

时间: 2024-08-03 04:39:28

swift中,Optional、?与!之间的关系的相关文章

Swift中Optional值的链式调用学习笔记_Swift

Swift中的Optional值有这样的特性,当对其进行可选拆包时,即使用?进行Optional类型值的取值时,如果Optional值不为nil,则会返回原始类型的数据值,如果为nil,则会返回nil.因此,当使用?对Optional拆包后进行方法.属性或者下标的调用时,如果有值,则会成功相应调用,如果没有值,则会调用失败,返回nil. 注意:使用!则会进行强制拆包,这时如果Optional值为nil,则会出现运行时错误,因此开发者在使用!进行强制拆包时,必须确认Optional类型值不为nil

java开发中:用户、订单、订单详情、商品之间的关系 搞不清

问题描述 java开发中:用户.订单.订单详情.商品之间的关系 搞不清 此案例的业务关系是用户.订单.订单详情.商品之间的关系,其中, 一个订单只能属于一个人. 一个订单可以有多个订单详情. 一个订单详情中包含一个商品信息. 所以它们的关系是如下: 订单和人是 一对一的关系. 订单和订单详情是 一对多 的关系. 订单和商品是 多对多的关系. 明明人和订单是一对多,为什么说成了一对一,订单和商品又怎么是多对多的关系? 求解 解决方案 最近在oracle数据库里刚学了交易系统表结构的设计,来说说我的

ThinkPHP中URL路径访问与模块控制器之间的关系_php实例

ThinkPHP中URL路径访问与模块控制器之间的关系是ThinkPHP程序开发中非常重要的一个环节.熟练的掌握该技巧对于进一步学习ThinkPHP起着至关重要的作用.具体分析如下: 打开控制器页面: UserAction.class.php  //路径:admin\Lib\Action\   此处的admin为新建的项目对应的目录 我们都知道在Action里的方法默认为Public属性,私有属性的方法没法访问,但定义私有属性的方法也有其意义所在. 在其中定义私有方法的意义:主要体现在,能够在这

class-如何简洁明了的描述Android中活动、实例、对象、类、抽象类、接口之间的关系?

问题描述 如何简洁明了的描述Android中活动.实例.对象.类.抽象类.接口之间的关系? 如何简洁明了的描述Android中活动.实例.对象.类.抽象类.接口之间的关系? 解决方案 实例.对象.类.抽象类.接口是java的语法,和android没有关系. 抽象类是不可以实例化并且包含抽象成员的类,一种特殊的类. 类的实例叫做对象 接口约定了一个类必须实现哪些方法 android的活动(activity)是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务 解决方案二: 抽象类和接

MFC语言中的消息和函数之间的关系

问题描述 MFC语言中的消息和函数之间的关系 MFC中的消息和函数之间的关系是什么,比如OnSize这个是一个函数吧,怎么变成消息的? 解决方案 每个窗口有一个消息循环,mfc对消息循环做了包装,通过消息映射宏将收到指定的消息调用对应的虚函数处理,你写的onsize就是这样一个函数. 解决方案二: Onsize 是窗口大小发生了改变时调用的 3个消息分别是:WM_SIZE.WM_SIZING.WM_GETMINMAXINFO:分别对应相应的处理函数:OnSize.OnSizing.OnGetMi

c++-C++ 6.0中goto语句和行号之间的关系是什么

问题描述 C++ 6.0中goto语句和行号之间的关系是什么 C++ 6.0语言中的行号是不是就相当于指针?怎么样把代码行转换为函数指针?有没有库函数的实现? 解决方案 goto语句和指针有什么关系?函数才相当于指针.你可以把代码拆分成很多函数. 解决方案二: 行号1-n 是左边那个显示第几行的吧 goto 语句跟他没关系 例如:goto 基本用法 main(){ int i=0; loop: i++; if(i>9) { printf("数大于9") }: else { got

离散数学中的问题,谁知道什么是偏序,什么是对偶,它们之间的关系是什么样的?

问题描述 离散数学中的问题,谁知道什么是偏序,什么是对偶,它们之间的关系是什么样的? 离散数学中的问题,谁知道什么是偏序,什么是对偶,它们之间的关系是什么样的? 解决方案 http://wenku.baidu.com/link?url=QVwE-zvlRbbZUoNoqCFG5jTfdoP7vfHiFn9FyhREWaXrvYSlp0gKmfqo0eexrDkvgtAu1Kj2L3XZBNvGljp8lKhDlZYr2RJ48D5xW7I5VCe 看这个课件,对偶和偏序根本无关 解决方案二: 偏

andriod-android中Intent和Bundle之间的关系是怎么样的Bundle用来传输数据 那Intent干嘛用的

问题描述 android中Intent和Bundle之间的关系是怎么样的Bundle用来传输数据 那Intent干嘛用的 android中Intent和Bundle之间的关系是怎么样的Bundle用来传输数据 那Intent干嘛用的 解决方案 http://www.jb51.net/article/37478.htm 解决方案二: 打个比方: 中国向美国海运箱装的水果 中国就是Activity1,美国是Activity2 海运则是 Intent,装水果的箱子则是bundle,箱子上的编号就时ke

写一个存储过程,更新5张表,表之间没有关系,表中的字段也不相同,要用传参数的形式

问题描述 写一个存储过程,更新5张表,表之间没有关系,表中的字段也不相同,要用传参数的形式 求助,写一个存储过程,更新5张表,表之间没有关系,表中的字段也不相同,要用传参数的形式.是否可以写在一个存储过程中.谢谢大家啦.遇到难题啦. update语句已经写好了,就是不知道如何整合成存储过程. 解决方案 可以的,一个存储过程可以执行多个update语句