可选链

简介:

学习可选链的前提我们要对可选类型进行复习,可以参考我之前写的这篇博客Object-C—>Swift之(二)可选类型

个人理解可选链建立在可选类型的基础上,可选类型操作的是某个变量,而可选链操作的是某几个类

围绕今天是猴年正月二十一为题材,学习一下这个可选链

     class Animalsign
      {
     var animal=""
     var month:Month!
     init(animal:String)
      {
   self.animal=animal
 }
  }
 class Month {

    var month=""
    var day:Day!
    init(month:String)
    {
    self.month=month
    }
}
class  Day{
    var day=""

    init(day:String)
    {
    self.day=day
    }
}

上边定义了三个类分别代表年月日,注意看下面的输出代码:

第一份输出代码:常规逻辑

    var animal=Animalsign(animal:"猴年")
    var month=Month(month:"正月")
    animal.month=month
    var day=Day(day:"二十一")
    month.day=day
    print("\(animal.month!.day.day)")

perfect!完美的输出了二十一


第二份输出代码:见证奇迹的时候

    var animal=Animalsign(animal:"猴年")
    print("\(animal.month!.day.day)")

当我们Com+R运行的时候崩溃了,为什么呢?显然我们的月份和日都没有赋值,而我们就进行输出,就造成了崩溃。是不是很苦恼呀,因此可选链就应运而生了

将上面的访问链中的的强制解析的感叹号(!)换成问号(?)就构成了可选链的访问方式,即使在隐式解析后面也得加上问号(本来按可选类型的隐式是可以省略的,但这里是不行)

即把第二份代码改为

    var animal=Animalsign(animal:"猴年")
    print("\(animal.month?.day?.day)")

此时输出的值为nil,而不会进行崩溃


当可选值为空时可选链即刻失败,然而一般的强制解析将会引发运行时错误。可选链可以处理各类之间的属性、方法、下标等的,在这里我只举了属性,其他的就不一一举例说明了,作为一名优秀的程序员还是要慢慢锻炼有触类旁通的能力。其他的在形式上无外乎加上问号(?),但其中的意义之处要细细品味,原理机制要明白。

目录
相关文章
|
1月前
|
JavaScript 前端开发 安全
javascript中的可选链操作符
javascript中的可选链操作符
|
5月前
|
C++
05 C++ - 作用域运算符(::)
05 C++ - 作用域运算符(::)
28 0
|
6月前
|
存储 Swift
24 闭包和闭包表达式
闭包和闭包表达式
38 0
|
7月前
|
JavaScript 前端开发
空值合并运算符和可选链
空值合并运算符和可选链
|
9月前
|
JavaScript 前端开发 Go
立即执行函数
立即执行函数
35 0
|
JavaScript 前端开发
typeof 操作符
typeof 操作符
50 0
|
JavaScript 前端开发
|
JavaScript 前端开发
typeof 运算符
typeof 运算符
35 0
|
自然语言处理 JavaScript 前端开发
深入理解立即执行函数
深入理解立即执行函数
|
JavaScript 前端开发
逗号运算符的妙用
逗号运算符的妙用
210 0

热门文章

最新文章