swift 笔记 (十六) —— 可选链

可选链(Optional Chaining)

我们都知道“可选型”是什么,那么可选链又是什么,举个例子解释一下:

struct MyName{

var name

}

struct MyInfo {

var myName:MyName? = MyName()

}

class MyClass {

var structInstance: MyInfo? = MyInfo()

}

这里有两个结构体和一个类,当,这个类实例化的时候:

var myInstance = MyClass()

所有的可选属性都会被初始化,因为我写了默认值。

if let name = myInstance.info?.myName?.name {

println(name)

} else {

println(“some info is nil")

}

在红字部分,可以看到,是使用的一连串的可选值。这就叫做可选链。

这里我还使用了一个很早的笔记中提到的  if let name = 可选型 {……} 这样的语法。

这是因为:在可选链中,任何一个环节的可选型解析失败(值为nil),那么整个可选链的结果为nil。

当然,其实我们可能会想在第一个环节使用“!”来让可选链返回一个确切的值,而不是可选值,比如:

let name = myInstance.info!.myName!.name

但,大多数情况,我们并不知道有谁会来改代码,有谁会改变某个封装的实现,如果错误的解析了一个可选值的话(一个值为nil的可选型),那么带来的后果只有一个,我们的程序会崩掉。。。。所以,千万不要这么干!!!!!

这章就说了这么点事儿。。。。至于什么调用函数,使用下标,不需要再说了,逻辑能力正常的人类,都直接就会用了。

swift 笔记 (十六) —— 可选链,布布扣,bubuko.com

时间: 2024-10-10 07:24:57

swift 笔记 (十六) —— 可选链的相关文章

swift 注意事项 (十六) —— 可选链

可选链(Optional Chaining) 我们都知道"可选型"是什么.那么可选链又是什么,举个样例解释一下: struct MyName{ var name } struct MyInfo { var myName:MyName? = MyName() } class MyClass { var structInstance: MyInfo? = MyInfo() } 这里有两个结构体和一个类,当.这个类实例化的时候: var myInstance = MyClass() 全部的可

swift 笔记 (十四) —— 构造过程

构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们通常会定义一个方法来完成,这个方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作以及一此自定义化的处理. 为存储型属性设置初始值 类和结构体在生成实例那一刻,必须为所有的属性赋以特定的初始值. 要么在定义存储型属性的时候直接给个初始值,否则就必须在构造器里面指定一个初始值. 上面说的这两种情况,都不会触发存储型属性的监听者行为(property observer). struc

swift 笔记 (十九) —— 协议

协议(Protocols) 协议仅是用定义某些任务或者是功能必须的方法和属性.类似于java里的interface的作用.但协议并不会实现具体的功能. 我猜这个名字源于OO中提到的"契约",但我并不觉得这名字很好,反而是interface这名字更容被接受,因为我觉得协议这个名字很容易和网络编程的时候的网络协议搞混,网络协议也通常简称为协议. 语法: protocol MyProtocol { //协议定义 } struct MyStruct: MyProtocol1, MyProtoc

C++学习笔记十六-模板和泛型编程(二)

C++学习笔记十六-模板和泛型编程(二) 16.4 类模板成员 1.模板作用域中模板类型的引用: 通常,当使用类模板的名字的时候,必须指定模板形参.这一规则有个例外:在类本身的作用域内部,可以使用类模板的非限定名.例如,在默认构造函数和复制构造函数的声明中,名字 Queue 是 Queue<Type> 缩写表示.实质上,编译器推断,当我们引用类的名字时,引用的是同一版本.因此,复制构造函数定义其实等价于: Queue<Type>(const Queue<Type> &a

《Swift Programming Language 》——可选链(Optional Chaining)

可选链(Optional Chaining)是一种可以请求和调用属性.方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空(nil).如果自判断的目标有值,那么调用就会成功:相反,如果选择的目标为空(nil),则这种调用将返回空(nil).多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效. 注意: Swift 的自判断链和 Objective-C 中的消息为空有些相像,但是 Swift 可以使用在任意类型中,并且失败与否可以被检测到. 可选链

swift 笔记 (十二) —— 下标

下标 swift允许我们为 类,结构体,枚举 定义下标,以更便捷的方式访问一大堆属性.比如Array和Dictionary都是结构体,swift的工程师已经为这两个类型提供好了下标操作的代码,所以,我们才可以通过 myArray[2]这种方式,读取和改写这个struct中保存的数据.而且,一个类型中可以定义多种下标访问方式(重载,关于重载,在后面的笔记中会提到,这里先不用太在意) 下标可以定义为"读写"型的,也可以定义为"只读"型,这种行为,是通过定义一组操作完成的

【Swift学习】Swift编程之旅---可选链(二十一)

可选链Optional Chaining是一种可以在当前值可能为nil的可选值上请求和调用属性.方法及下标的方法.如果可选值有值,那么调用就会成功:如果可选值是nil,那么调用将返回nil.多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为nil,整个调用链都会失败,即返回nil. 通过在想调用的属性.方法.或下标的可选值(optional value)后面放一个问号(?),可以定义一个可选链.这一点很像在可选值后面放一个叹号(!)来强制展开它的值.它们的主要区别在于当可选值为空时可选

MYSQL进阶学习笔记十六:MySQL 监控!(视频序号:进阶_35)

知识点十六:MySQL监控(35) 一.为什么使用MySQL监控 随着软件后期的不断升级,myssql的服务器数量越来越多,软硬件故障的发生概率也越来越高.这个时候就需要一套监控系统,当主机发生异常时,此时通过监控系统发现和处理. 这个监控实际上是在我们的开发完成之后,这个时候软件就开始在运行,这个运行我们就需要去关注到mysql服务器是否正常,那么我们要观察它就需要给它提供一些监控,这监控就是当它发生故障之后, 那么我们这个监控就会告诉我们到底什么地方发生了一些异常或者一些错误,这个时候我们就

Swift学习笔记十六:协议

Protocol(协议)用于统一方法和属性的名称,而不实现不论什么功能. 协议可以被类.枚举.结构体实现.满足协议要求的类,枚举,结构体被称为协议的遵循者. 遵循者须要提供协议指定的成员,如属性,方法,操作符,下标等. 一.协议的基本的语法 咱们还是先上代码吧 protocol Human { var name:String{ get set } var isMan:Bool{set get} class var isUsable:Bool { set get } //类成员.表示这个类是否可用