在swift里定义一个变量/常量时,会有一个与OC里不一样的概念:可选项。可选项的定义的意义就是告诉编辑器:此变量的可以有值,也可以为空。

第一:可选项的包装和强行解包。

表示方式:

以上可以被称为是wrapped

在调用的时候可以被称为unwrapped

其中:常量和变量的默认可选项是不一样的。

常量的默认可选项:没有

变量的可选项:nil

不管是常亮还是变量,初始值只能初始化一次!!,并且,常量不能被赋值(初始化后赋值)。

在强行解包的时候,如果是nil,就会崩溃。因为,nil不能参与运算。

第二:??简单三目的使用

为了解决强行解包的时候可能出现崩溃的问题,我们一般要对强行解包的对象进行是否为空的判断,但是这样的话,也就失去了swift设计的初衷,并且要是每个都判断的话就会使代码变的特别的冗余。

那么,怎么解决呢?swift出了一个??操作,它是一个简单的三目,用来判断是否为nil,不为nil,就使用原来的值,否则就是??后面我们给它设置的值。

如下?:

第三:免强行解包

虽说使用??可以更加简化判断的代码,但毕竟是尚有操作。swift里还有一个运算符,就是iflet/var, 它的作用是做一下判断,不为nil的话,才能进入执行大括号里去执行代码。这样就免除了多余的代码。

如下?:

最后:为了更为符合我们的开发习惯,swift推出了guardlet,它和iflet一样,但是结构上刚好相反。一是进入执行的变量有一个为nil,二是不是nil的时候的变量的作用域更大一层。

如下?:

PS:iflet和guardlet在解决解包的时候,受用的特别频繁,也是做常用的。再次有一个小细节,那就命名,一般情况下,我们都是使用相同的名字,这样就减少了重命名,并且其他的都不变。

如下?:

swift的可选项--optional/?相关推荐

  1. Swift中的选项集合

    Swift3中的选项集合(Option Set) 作者:Ole Begemann,原文链接,原文日期:2016/09/28 译者:Lanford3_3:校对:saitjr:定稿:CMB 选项集合在OC ...

  2. swift的可选值(optional)

    苹果那文档写了一大堆也没有好好的写一下可选值(optional)这个东西.就是在有一个"Optional Chaining"的章节,但是也不是很充分的说明.最后找了半天在" ...

  3. 十六、Swift 可选值链条 Optional Chaining

    1. 概述 当某个可选值可能为空时,如果要访问它的属性.方法.下标脚本,需要使用Optional chaining 对它进行解包,然后进行访问. 如果这个可选值包含一个值,那么访问成功. 如果这个可选 ...

  4. Swift之深入解析如何处理非可选的可选项类型

    一.前言 Optional 是 Objective-C 没有的数据类型,是苹果引入到 Swift 语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是 nil. 可选 ...

  5. Swift之深入解析可选类型Optional的底层原理

    一.Optional 简介 Swift 的可选(Optional)类型,用于处理值缺失的情况,可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值". S ...

  6. Swift 4官方文档中文版 The Basic(上)

    Swift学习交流群: 313838956 本群由Guards翻译组创建并维护, 志于给认真想学习Swift的同学打造一个良好的交流圈子. 该文章翻译自Apple官方文档: The Swift 4 P ...

  7. swift_010(Swift 的可选类型)

    //***********swift--1.3--可选类型--*************************** // (Optionals)即在某个数据类型后面加上问号(?)或感叹号(!) // ...

  8. Optional变量初学者指南

    苹果三周前发布了Swift. 从那时起,我一直在阅读Swift的官方指南,并在Xcode 6测试版中使用. 我开始喜欢Swift的简单和语法. 与我的团队一起,我仍然在研究新的语言,并看看它与Obje ...

  9. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程

    使用 Swift 在 iOS 10 中集成 Siri -- SiriKit 教程 转载地址:http://swift.gg/2016/06/28/adding-siri-to-ios-10-apps- ...

最新文章

  1. 新手教程:用.htaccess实现二级域名功能
  2. 二十四、Struts2中的UI标签
  3. Android 自定义debug.keystore
  4. 打印系统里所有不包含任何错误的order list
  5. Rds基于mysql开发的_开发云数据库RDS MYSQL版讲解
  6. php aes 3des区别,AES和3DES之间的区别
  7. iOS开发——高级技术PassBook服务
  8. 【深入理解编译】深入理解编译
  9. 【UNITY3D 游戏开发之三】NGUI HUDTEXT 的练习源码及资源
  10. 基于php的校园公寓宿舍报修管理系统设计与实现
  11. [转]DRP系统知识点总结
  12. 苏宁!你还挺得过去吗?(苏宁大幅裁员)
  13. Unity3D插件之FingerGestures:手势插件
  14. 有n个人围成一圈 顺序排号 java_java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出...
  15. java 绘制图形实验心得体会_绘图实习心得体会3篇
  16. android 触摸屏监控,如何实现在安卓手机上对PLC进行监控-工业支持中心-西门子中国...
  17. centos 安装 janus
  18. 微信小程序入门与实战之更多电影列表与电影搜索
  19. 旅行:旅行的意义是旅行本身没有意义
  20. 没有身家也要有身价,有身家更要有身价

热门文章

  1. 用后端接口调试工具Insomnia发送请求
  2. Android的SQLite数据库增删查改(SimpleAdapter绑定ListView)
  3. java程序崩溃查询,java – 有程序识别它上次崩溃了吗?
  4. oracle24801错误,[数据库]oracle错误(ORA
  5. c++ 使用nacos_超赞!用阿里开源的Nacos做SpringCloud注册中心真贴心...
  6. 2021年陕西高考成绩单招查询时间,2021年陕西高考录取结果什么时候出来,查询时间一览表...
  7. eclipse android 慢,Android编译很慢(使用Eclipse)
  8. python3 beautifulsoup_Python3中BeautifulSoup的使用方法
  9. java项目中包的命名规范
  10. 解决easyui textarea 值不显示及获取textarea的值