可选链OptionalChaining运算符

分类:知识百科 日期: 点击:0

(?.)是Swift 5.1中引入的一个新特性,它可以在可选值上调用属性、方法和下标,并且可以检查它们是否存在,如果存在,就可以获取值,否则可以获取nil。

class Person {
    var residence: Residence?
}

class Residence {
    var numberOfRooms = 1
}

let john = Person()

// 使用可选链运算符
if let roomCount = john.residence?.numberOfRooms {
    print("John's residence has \(roomCount) room(s).")
} else {
    print("Unable to retrieve the number of rooms.")
}
// 打印 "Unable to retrieve the number of rooms."

在上面的例子中,john.residence是可选值,因为它可能是nil,所以我们使用可选链运算符(?.)来检查它是否存在,如果存在,就可以获取它的numberOfRooms属性,否则就会返回nil,从而避免了运行时的异常。

可选链运算符不仅可以访问属性,还可以访问方法和下标,例如:

if let buildingIdentifier = john.residence?.address?.buildingIdentifier() {
    print("John's building identifier is \(buildingIdentifier).")
}

上面的例子中,我们使用可选链运算符调用residence的address属性,调用buildingIdentifier()方法,如果residence和address都存在,就会返回buildingIdentifier的值,否则就会返回nil。

可选链运算符还可以用来访问可选值的下标,例如:

if let firstRoomName = john.residence?[0].name {
    print("The first room name is \(firstRoomName).")
} else {
    print("Unable to retrieve the first room name.")
}

上面的例子中,我们使用可选链运算符访问residence的下标,如果residence存在,就会返回第一个房间的名字,否则就会返回nil。

可选链运算符还可以与nil合并运算符(??)一起使用,以提供默认值,例如:

let roomName = john.residence?[0].name ?? "Unknown"
print("The first room name is \(roomName).")
// 打印 "The first room name is Unknown."

在上面的例子中,我们使用可选链运算符访问residence的下标,如果residence存在,就会返回第一个房间的名字,否则就会返回“Unknown”作为默认值。

可选链运算符(?.)可以在可选值上调用属性、方法和下标,并且可以检查它们是否存在,如果存在,就可以获取值,否则可以获取nil。它可以帮助我们避免运行时的异常,使代码更加安全和可靠。

标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。