Swift4.0复习Optional
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的更多相关文章
- Swift4.0复习特性、编译标志和检查API的可用性
1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...
- Swift4.0复习类型定义、类型投射等操作
1.类型定义: /// 这里将MyInt定义为Int32类型 typealias MyInt = Int32 /// 这里将MyArrayInt定义为[MyInt]数组类型 typealias M ...
- Swift4.0复习闭包
1.闭包的定义和调用: _ = { (param1: Int, param2: Float, param3: Void) -> return_type in // 闭包执行代码 /* ... * ...
- Swift4.0复习访问控制与作用域
1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...
- Swift4.0复习错误处理
1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...
- Swift4.0复习扩展
1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...
- Swift4.0复习类
1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...
- Swift4.0复习协议
1.协议的定义: /// 定义一个协议MyProt protocol MyProt { /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo() ...
- Swift4.0复习结构体
1.基本语法: /** 定义了一个结构体 */ struct Structure { /// 一个常量存储式实例属性, /// 并直接为它初始化 let constProperty = /// ...
随机推荐
- YAML_16 debug检测
ansible]# ansible-playbook --syntax-check http.yml //检测语法 playbook: http.yml ansible]# ansible-play ...
- nginx和php整合安装过程记录
1.nginx的配置:必须是指定 www用户 和www用户组访问 groupadd www useradd -g www www daokr@DK:~$ cat /etc/nginx/nginx.co ...
- c函数指针和指针函数如何使用何定义;如何调用使用
#include <stdio.h> int * sum(int x); //声明一个 指针函数 返回类型位一个指针变量 可以通过*p来获取值 int (*pfun)(int,int);/ ...
- zabbix 内置key说明
原文参考:https://blog.csdn.net/whs_321/article/details/52939263 一.简介 Zabbix 内置了很多丰富的key,使得我们在添加linux os模 ...
- Code Chef October Challenge 2019题解
传送门 \(MSV\) 设个阈值搞一搞就行了 //quming #include<bits/stdc++.h> #define R register #define pb emplace_ ...
- word 新建一行文字不能左对齐
- docker运行puppeteer出现defucnt僵尸进程
其实这是docker的一个bug,就是在运行前加--init即可,注意这个在mac中没有只在linux上有. docker run --init -d ..... 具体内容参见:https://sta ...
- vue+elementui搭建后台管理界面(5递归生成侧栏路由)
有一个菜单树,顶层菜单下面有多个子菜单,子菜单下还有子菜单... 这时候就要用递归处理 1 定义多级菜单 修改 src/router/index.js 的 / 路由 { path: '/', redi ...
- 深度学习面试题10:二维卷积(Full卷积、Same卷积、Valid卷积、带深度的二维卷积)
目录 二维Full卷积 二维Same卷积 二维Valid卷积 三种卷积类型的关系 具备深度的二维卷积 具备深度的张量与多个卷积核的卷积 参考资料 二维卷积的原理和一维卷积类似,也有full卷积.sam ...
- IdHTTPServer允许跨域访问
IdHTTPServer允许跨域访问 procedure TMain.idHttpServerCommandGet(AContext: TIdContext; ARequestInfo: TIdHTT ...