对照Java学习Swift--可选链式调用(Optional Chaining)

可选链式调用(Optional Chaining)是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会成功;如果可选值是nil,那么调用将返回nil。多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为nil,整个调用链都会失败,即返回nil。

swift这个功能设计的很好,不会报空指针异常,如果是在Java中,那个环节的对象为空,则报空指针异常,程序异常退出,swift则不会,会直接返回一个nil,很方便。

通过在想调用的属性、方法、或下标的可选值(optional value)后面放一个问号(?),可以定义一个可选链。

if let roomCount = john.residence?.numberOfRooms {
    print("John‘s residence has \(roomCount) room(s).")
} else {
    print("Unable to retrieve the number of rooms.")
}

即使residence为nil也不会报异常,会进入else的分支,很简单了。

通过可选链式调用访问属性

let someAddress = Address()
someAddress.buildingNumber = "29"
someAddress.street = "Acacia Road"
john.residence?.address = someAddress

通过可选链式调用调用方法

if john.residence?.printNumberOfRooms() != nil {
    print("It was possible to print the number of rooms.")
} else {
    print("It was not possible to print the number of rooms.")
}

通过可选链式调用访问下标

john.residence?[0] = Room(name: "Bathroom")

访问可选类型的下标

var testScores = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]
testScores["Dave"]?[0] = 91
testScores["Bev"]?[0]++
testScores["Brian"]?[0] = 72

连接多层可选链式调用

可以通过连接多个可选链式调用在更深的模型层级中访问属性、方法以及下标。然而,多层可选链式调用不会增加返回值的可选层级。

也就是说:

  • 如果你访问的值不是可选的,可选链式调用将会返回可选值。
  • 果你访问的值就是可选的,可选链式调用不会让可选返回值变得“更可选”。

在方法的可选返回值上进行可选链式调用

if let beginsWithThe =
    john.residence?.address?.buildingIdentifier()?.hasPrefix("The") {
        if beginsWithThe {
            print("John‘s building identifier begins with \"The\".")
        } else {
            print("John‘s building identifier does not begin with \"The\".")
        }
}
时间: 2024-10-17 15:10:36

对照Java学习Swift--可选链式调用(Optional Chaining)的相关文章

学习Swift -- 可选链

可空链式调用 可空链式调用是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这种调用将返回空(nil).多个连续的调用可以被链接在一起形成一个调用链,如果其中任何一个节点为空(nil)将导致整个链调用失败. 使用可空链式调用来强制展开 通过在想调用非空的属性.方法.或下标的可空值后面放一个问号,可以定义一个可空链.这一点很像在可空值后面放一个叹号(!)来强制展开其中值.它们的

对照Java学习Swift--错误处理(Error Handling)

简介 在异常处理方面,Java跟Swift很相似,要么抛出异常,要么自己处理异常,但是语法有些不太一样. 抛出异常Java跟Swift都是用throws关键字,Java在小括号的后面,大括号的前面,Swift在返回值箭头的前面. 自己处理异常Java使用try catch结构,Swift使用do-catch结构,同样可以匹配多个catch块. java中的catch块要么是系统提供的,要么是自定义的异常类,自定义的异常类必须的继承Exception类,而Swift的catch块是一个enum的每

Swift 可选链-备

在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类,实体类是系统中的人.事.物.Employee通过dept属性与Department关联,Department通过comp属性与Company关联. 下面看示例代码: [html] view plain copy print? class Employee { var no: Int = 0 var 

对照Java学习Swift--自动引用计数(Automatic Reference Counting)

自动引用计数(Automatic Reference Counting)简称ARC,是Swift对应用程序内存的跟踪和管理.跟Java里面的Gc类似,但是又不太一样. ARC是实例的引用数为0,ARC就会销毁这个实例. GC是当程序不能访问这个实例,称为该实例"不可达的",GC就会负责回收这些"不可达的"的实例,回收算法很复杂,Java规范对GC的很多行为都没有进行严格的规定,不同的厂商在各自实现的Jvm上都有不同的实现. ARC需要开发者保证实例不再被任何属性.常

【Todo】Java学习笔记 100==100 & Reflection API & Optional类详解 & DIP、IoC、DI & token/cookie/session管理会话方式

为什么1000 == 1000返回为False,而100 == 100会返回为True?   Link Java Reflection API:Link Java8 Optional 类深度解析: Link 深入理解DIP.DI及IoC容器: Link 3种会话管理的方式: Link

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

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

可选链式调用

可选链式调用 可选链式调用是一种可以在当前值可能为 nil 的可选值上请求和调用属性.方法及下标的方法.如果可选值有值,那么调用就会成功:如果可选值是 nil,那么调用将返回 nil.多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为 nil,整个调用链都会失败,即返回 nil. 注意 Swift 的可选链式调用和 Objective-C 中向 nil 发送消息有些相像,但是 Swift 的可选链式调用可以应用于任意类型,并且能检查调用是否成功. 使用可选链式调用代替强制展开 通过在想

[Swift]学习笔记-可选类型/可选链

可选类型/可选链                        Make-by-LJW ---转载请注明出处... 它的可选性体现于请求或调用的目标当前可能为空(nil) 如果可选的目标有值,那么调用就会成功: 如果选择的目标为空(nil),则这种调用将返回空(nil) 多次调用被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效. 因为可选链的结果可能为nil,可能有值.因此它的返回值是一个可选类型. 可以通过判断返回是否有值来判断是否调用成功 有值,说明调用成功 为nil,

Swift 2.0学习笔记(Day 26)——可选链

原创文章,欢迎转载.转载请注明:关东升的博客 在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类,实体类是系统中的人.事.物.Employee通过dept属性与Department关联,Department通过comp属性与Company关联. 下面看示例代码: class Employee { var no: Int = 0 var name: S