美文网首页Swift 5.x 学习之旅
swift学习之旅--可选链

swift学习之旅--可选链

作者: Auditore | 来源:发表于2020-06-16 22:08 被阅读0次

1.可选链的含义

可选链,就是在声明属性的时候,在属性的类型后面加上?问号,使得属性有一个默认值nil,这个特性非常方便,因为OC里,我们经常会需要先判断值是nil的情况和有值的情况。如果用可选链,就能免去写一堆的if(xxx = nil)省心。

当然,如果你用?可选链,那么当你赋值的时候,编译器会让你提供默认值,例如下面

func STATUSBAR_HEIGHT() -> CGFloat {
    return windowKey?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
}

2.?和!的区别

class Person {
    var residence: Residence?
}
 
class Residence {
    var numberOfRooms = 1
}

如果你创建一个新的 Person 实例,得益于可选项的特性,它的 residence 属性会默认初始化为 nil 。下面的代码中, john 拥有值为 nil 的 residence 属性:

let john = Person()

如果你尝试访问john的 residence 里的 numberOfRooms 属性,通过在 residence 后放一个叹号来强制展开它的值,你会触发一个运行时错误,因为 residence 根本没有值可以展开:

let roomCount = john.residence!.numberOfRooms
// 此时会报错

或者你非常肯定,不可能为nil,一定取得到值那么就直接加上!,表示强制展开,当然,你得承受可能会崩溃的后果。

3.官方文档里是这么说的

你可以通过在你希望如果可选项为非 nil 就调用属性、方法或者脚本的可选值后边使用问号( ? )来明确可选链。这和在可选值后放叹号( ! )来强制展开它的值非常类似。主要的区别在于可选链会在可选项为 nil 时得体地失败,而强制展开则在可选项为 nil 时触发运行时错误。

为了显示出可选链可以在 nil 值上调用,可选链调用的结果一定是一个可选值,就算你查询的属性、方法或者下标返回的是非可选值。你可以使用这个可选项返回值来检查可选链调用是成功(返回的可选项包含值),还是由于链中出现了 nil 而导致没有成功(返回的可选值是 nil )。

相关文章

  • swift学习之旅--可选链

    1.可选链的含义 可选链,就是在声明属性的时候,在属性的类型后面加上?问号,使得属性有一个默认值nil,这个特性非...

  • Swift3.0- 类型转换、Any、AnyObject(可选链

    Swift3.0- 类型转换、Any、AnyObject(可选链)

  • Swift可选类型、隐式可选类型与可选链

    Swift 可选类型、隐式可选类型与可选链 在 OC 中 nil 表示一个指向不存在的对象的指针,而 Swift ...

  • iOS开发 - 「Swift 学习」Swift 可选链

    Swift 可选链 可选链的定义:可选链是可以请求和调用属性、方法和子脚本的过程,用于请求或调用的目标可能为nil...

  • 【Swift 3.1】17 - 可选链 (Optional Ch

    【Swift 3.1】17 - 可选链 (Optional Chaining) 自从苹果2014年发布Swift,...

  • Swift:基础(二十六)可选链

    Swift 可选链 可选链(Optional Chaining)是一种可以请求和调用属性、方法和子脚本的过程,用于...

  • Swift:可选链

    可选链式调用是一种可以在当前值可能为 nil 的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用...

  • Swift - 可选链

    可选链 可选链 它的可选性体现于请求或者调用的目标当前可能为空 (nil)如果可选的目标有值,那么调用就会成功;如...

  • Swift 可选链

    可选链(Optional Chaining)是一种可以请求和调用属性、方法和子脚本的过程,用于请求或调用的目标可能...

  • swift可选链

    可选链是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法,如果可选值有值,那么就会调用成功;...

网友评论

    本文标题:swift学习之旅--可选链

    本文链接:https://www.haomeiwen.com/subject/jpsdxktx.html