以下是关于 Swift 可选链的一些基本操作:
1. 可选链调用属性:
class Person {
var residence: Residence?
}
class Residence {
var address: Address?
}
struct Address {
var street: String
var city: String
var zipCode: String
}
let person = Person()
let street = person.residence?.address?.street
在上面的例子中,person 的 residence 和 residence 的 address 都是可选的。通过可选链,可以安全地访问 street 属性,即使 residence 或 address 为 nil。
2. 可选链调用方法:
class Person {
var residence: Residence?
func printStreet() {
if let street = residence?.address?.street {
print("Street: \(street)")
} else {
print("No street information available")
}
}
}
let person = Person()
person.printStreet() // 输出 "No street information available"
在上面的例子中,通过可选链调用了 printStreet 方法,该方法尝试访问 street 属性。如果链中任何一个值为 nil,则方法内部的代码块将被执行。
3. 可选链调用下标脚本:
class Person {
var residences: [Residence] = []
}
class Residence {
var rooms: [String: String] = [:]
subscript(roomName: String) -> String? {
return rooms[roomName]
}
}
let person = Person()
let roomName = "Living Room"
let roomDescription = person.residences.first?[roomName] ?? "Room not found"
在上面的例子中,通过可选链调用了 residences 数组的第一个元素的下标脚本。如果 residences 数组为空,或者第一个元素为 nil,则 roomDescription 将被设置为默认字符串。
4. 多层可选链:
class Person {
var residence: Residence?
}
class Residence {
var address: Address?
}
struct Address {
var street: String
var city: String
var zipCode: String
}
let person = Person()
let zipCode = person.residence?.address?.zipCode
在上面的例子中,通过多层可选链访问了 zipCode 属性。如果 residence 为 nil,或者 address 为 nil,则 zipCode 将为 nil。
可选链允许在调用属性、方法或下标脚本时检查调用链中的任何一级是否为 nil,从而避免了在代码中插入大量的条件语句进行判空。
转载请注明出处:http://www.pingtaimeng.com/article/detail/6857/Swift