Swift5.1-可选链

289 阅读1分钟

可选链(Optional Chaining)

  1. 如果可选项为nil, 那么调用方法、属性、下标会失败,结果为nil.
  2. 如果可选项不为nil,那么调用方法、下标、属性成功,结果会包装成可选项。
  3. 如果结果本来就是可选项,不会进行再次包装。
class Car {
    var price = 0
}
class Dog {
    var weight = 10
}
class Person {
    var name: String = ""
    var dog: Dog = Dog()
    var car: Car? = Car()
    func age() -> Int {
        18
    }
    func eat() {
        print("Person eat")
    }
    subscript(index: Int) -> Int {
        index
    }
}

var person: Person? = Person()
var age1 = person!.age()  // Int,强制解包有风险,一般不用
var age2 = person?.age()  // Int?
var name = person?.name   // String?
var index = person?[5]    // Int?

func getName() -> String {
    "jack"
}
person?.name = getName()   // 如果person为nil, 那么getName方法不会调用

判断可选项调用方法是否成功,可以使用可选项绑定。

if let _ = person?.eat() {
    print("调用成功")
} else {
    print("调用失败")
}

多个?可以连在一起,形成可选链。如果链中任意节点为nil, 则整个链会调用失败。

var dog = person?.dog
var weight = person?.dog.weight
var price = person?.car?.price

日常使用:

var score = ["long": [12,33,44], "chi": [55, 66, 77]]
score["long"]?[0] = 23
score["chi"]?[1] = 99
score["xiao"]?[9] = 88

var num1: Int? = 5
num1 = 10  // Option(10)

var num2: Int? = nil
num2? = 10 // nil
print(num2)