什么是可选链,下面看个简单的例子就明白了
/*
1. 从可选链中进行取值
2. 给可选链赋值
3. 可选链调用方法
*/
// 1, 创建3个类
class Person {
var name: String = ""
var dog: Dog? // 对象类型的一般是可选类型,值类型一般赋个初值
}
class Dog {
var weight: Double = 0.0
var toy: Toy?
}
class Toy {
var price: Double = 0.0
func flying() {
}
}
// 2, 创建类的对象
let p = Person()
p.name = "why"
let d = Dog()
d.weight = 60.0
let t = Toy()
t.price = 100.0
p.dog = d
d.toy = t
// 3, 可选链的使用
// 3.1 取出why的狗的玩具的价格
/*
该写法非常危险:只要没有给对象赋值,强制解包时就会发生运行时错误
let dog = p.dog
let toy = dog!.toy
let price = toy!.price
*/
/*
// 该写法非常麻烦
if let dog = p.dog {
if let toy = dog.toy {
let price = toy.price
}
}
*/
// 一般用这种写法 ?. 就是可选链
// 系统会自动判断该可选类型是否有值,
// 如果有值,则解包;如果没值,则赋值nil
// 注意:可选链获取的值,一定是一个可选类型
if let price = p.dog?.toy?.price {
print(price)
}
// 3.2 给why的狗的玩具赋值一个新的价格
// 如果可选链中有一个可选类型没有值,那么语句直接不执行
p.dog?.toy?.price = 50
// 3.3 可选链调用方法
p.dog?.toy?.flying()










网友评论