1.Optional基本使用:

当我们声明一个Optional对象时,无论该对象是在文件作用域还是在函数体内作为局部对象声明,如果不对它初始化,那么它的值默认为空(nil)。

// 声明a为Int类型的option类型对象
var a: Int? = 100
// 类型为Int?,初始化为nil
var b: Int? = nil

2.Optional链:

3.Optional的强制拆解:

4.Optional绑定:

5.空结合操作符:

var a = Int?()
let b = // 这里的a ?? b表达式
var c = a ?? b // 相当于
c = a != nil ? a! : b

6.隐式拆解的Optional类型:

// 这里声明了一个隐式拆解的Optional变量a
var a: Int! =
 
// 这里b的类型为Int?
let b = a
 
// 这里输出:b = Optional(10)
print("b = \(String(describing: b))")
 
// 当隐式拆解的Optional对象作为复合赋值操作符的左值时,
// 仍然需要使用 ! 或 ? optional-chaining操作符
a! +=
a? +=
 
// 这里声明了一个隐式拆解的Optional数组变量arr
var arr: [Int]! = [, , ]
 
// 这里对arr使用 ! 操作符,
// 使得 arr! 表达式作为 += 的左操作数
// 这里的 ! 不能缺省
arr! += [, , ]

使用场景:

“将某个图像视图控件作为某个视图控制器类的实例属性。
但是在声明它的时候由于不知道当前视图控制器的实际尺寸,也不知道所用的图像,
因此无法对它进行初始化,而只有等到调用 viewDidLoad方法之后才能对它初始化。
那么这个时候,该图像视图对象就可以声明为隐式拆解的Optional类型,后续对它成员的访问就不需要显式样使用optional-chaining操作符了,代码也能更简洁一些。” 摘录来自: “大话Swift 4.0”。 iBooks.

  

最新文章

  1. Android APK瘦身之Android Studio Lint (代码审查)
  2. IOS并发编程GCD
  3. sql 添加修改说明
  4. docker offical docs:Working with Containers
  5. winform:无法引用其他类库,dll,using等个人看法【图】
  6. [POJ 1365] Prime Land
  7. ioc容器
  8. WebApi学习总结系列第四篇(路由系统)
  9. php 写内容入csv文件乱码解决方法
  10. 从C到C++,C语言与C++的关系
  11. MessageDigest简要
  12. iOS开发之transform
  13. flask中下载服务器上特定路径的文件
  14. Java 求集合的所有子集
  15. 新概念英语(1-95)Tickets,please!
  16. 记一次因为session引起的并发问题
  17. Linux日志出现大量"kernel: NET: Registered protocol family 36"
  18. jdk8新特性表达式1
  19. SQL 查询存储过程
  20. nginx安装以及常用配置

热门文章

  1. java集合Map
  2. Java switch语句使用注意事项
  3. docker 构建自己的image 镜像文件
  4. C 语言程序设计
  5. 洛谷 P1120 小木棍 dfs+剪枝
  6. learning java swing 双缓冲和键盘驱动
  7. qt截图grapWindow,操作系统剪切版QClipBoard实现进程间通信
  8. C# 对IOC的理解 依赖的转移
  9. 在Ubuntu 或 Debian 系统环境安装MYSQL数据库
  10. C结构体指针的初步使用