Swift 的可选链是一种使用在当前值可能为 nil 的可选类型上的操作符,它提供了一种优雅的方式来访问或调用属性、方法和下标脚本,而不必在每一步都显式地检查是否为 nil。可选链可以让我们在调用属性、方法或下标脚本的时候,如果可选项为 nil,就会忽略整个调用,并返回 nil。

以下是关于 Swift 可选链的基本信息和使用方法:

可选链访问属性
class Person {
    var residence: Residence?
}

class Residence {
    var address: Address?
}

class Address {
    var street: String = "No Street"
}

let person = Person()

// 使用可选链访问属性
if let street = person.residence?.address?.street {
    print("Street: \(street)")
} else {
    print("No street information available.")
}

可选链调用方法
class Kitchen {
    func cook() {
        print("Cooking in progress...")
    }
}

class Residence {
    var kitchen: Kitchen?
}

let residence = Residence()

// 使用可选链调用方法
residence.kitchen?.cook()  // 输出无内容,因为 kitchen 为 nil

可选链调用下标脚本
class School {
    var students: [String: Int] = ["Alice": 90, "Bob": 85, "Charlie": 95]
}

class Residence {
    var school: School?
}

let residence = Residence()

// 使用可选链调用下标脚本
let aliceScore = residence.school?["Alice"]
print(aliceScore)  // 输出 nil,因为 school 为 nil

多层可选链

可选链可以多层嵌套,依次访问多个层级的属性、方法或下标脚本。
class Person {
    var residence: Residence?
}

class Residence {
    var address: Address?
}

class Address {
    var street: String = "No Street"
}

let person = Person()

// 多层可选链访问属性
if let street = person.residence?.address?.street {
    print("Street: \(street)")
} else {
    print("No street information available.")
}

可选链调用可选方法

如果方法本身返回可选类型,那么可以使用可选链来调用这个方法。
class Calculator {
    func divide(a: Int, by b: Int) -> Int? {
        guard b != 0 else {
            return nil
        }
        return a / b
    }
}

let calculator = Calculator()

// 可选链调用可选方法
if let result = calculator.divide(a: 10, by: 2) {
    print("Result: \(result)")
} else {
    print("Cannot divide by zero.")
}

以上是一些关于 Swift 可选链的基本用法。可选链提供了一种简洁且安全的方式来处理可能为 nil 的可选类型,避免了繁琐的空值检查。


转载请注明出处:http://www.zyzy.cn/article/detail/14435/Swift