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.

  

Swift4.0复习Optional的更多相关文章

  1. Swift4.0复习特性、编译标志和检查API的可用性

    1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...

  2. Swift4.0复习类型定义、类型投射等操作

    1.类型定义: /// 这里将MyInt定义为Int32类型 typealias MyInt = Int32   /// 这里将MyArrayInt定义为[MyInt]数组类型 typealias M ...

  3. Swift4.0复习闭包

    1.闭包的定义和调用: _ = { (param1: Int, param2: Float, param3: Void) -> return_type in // 闭包执行代码 /* ... * ...

  4. Swift4.0复习访问控制与作用域

    1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...

  5. Swift4.0复习错误处理

    1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...

  6. Swift4.0复习扩展

    1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...

  7. Swift4.0复习类

    1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...

  8. Swift4.0复习协议

    1.协议的定义: /// 定义一个协议MyProt protocol MyProt {   /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo()   ...

  9. Swift4.0复习结构体

    1.基本语法: /** 定义了一个结构体 */ struct Structure {   /// 一个常量存储式实例属性, /// 并直接为它初始化 let constProperty =   /// ...

随机推荐

  1. (尚017)Vue插件

    1.如何开发插件? 2.编写自己的vue-myPlugin.js插件库,代码如下: /** * vue的插件库 * 最好使用匿名函数包裹起来,这样代码会更加规范 * 里面的实现被隐藏了 */(func ...

  2. php之大文件断点续传

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  3. 本地存储API

    一.定义 随着互联网的快速发展,基于网页的应用越来越普遍,同时也变得越来越复杂,为了满足各种各样的需求,会经常在本地存储大量的数据,HTML5规范提出了相关解决方案 本地存储设置读取方便,容量较大,s ...

  4. P2709 小B的询问 (莫队板子)

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  5. 性能测试学习第十天-----性能案例分析之CPU消耗过高&响应时间较长

    一.现象  /pinter/case/cpu?type=1   使用google的gjson.tojson性能较差    type=2 使用性能好的阿里巴巴的fastjson库 压测过程中,发现应用服 ...

  6. localstorage 必知必会

    做项目中发现localstorage在不同的域名下是不能相互访问的,于是找到了以下这篇文章,对localStorage做一个深入的了解 HTML API localstorage在浏览器的API有两个 ...

  7. 【多线程与并发】Java中的12个原子操作类

    从JDK1.5开始,Java提供了java.util.concurrent.atomic包,该包中的原子操作类提供了一种使用简单.性能高效(使用CAS操作,无需加锁).线程安全地更新一个变量的方式. ...

  8. 解决request.getSession().getServletContext().getRealPath("/")为null问题

    今天把程序部署到服务器,发现异常,FileNotFound异常,很快定位到getServletContext().getRealPath("/");返回空的问题.这个问题通常是传递 ...

  9. 判断x的m次方和y的m次方末尾三位数是否相等

    /*==============================================对于任意给定的两个正整数x和y,是否存在一个不超过100的正整数m使得x^m与y^m的末尾三位数相等呢? ...

  10. C语言函数库分类