gpt4 book ai didi

swift - 为什么在此示例中使用强制展开?

转载 作者:搜寻专家 更新时间:2023-10-31 21:58:42 26 4
gpt4 key购买 nike

let john = Person()
john.residence = Residence()

let johnsAddress = Address()
johnsAddress.buildingName = "The Larches"
johnsAddress.street = "Laurel Street"

john.residence!.address = johnsAddress

上面的例子是苹果语言指南。

为什么在最后一行使用强制展开(感叹号)?

这个例子中!?有区别吗?

最佳答案

当知道可选项具有非零值时,使用强制解包。在具有 nil 值的可选对象上使用它会产生运行时异常。

正常的展开是有条件的。如果 john.residencenil,那么它后面的内容将被忽略,并且不会产生错误(参见 Optional Chaining )。该语句根本不执行任何操作,因此不会发生任何赋值。

存在强制解包的原因是它避免在知道它有值时检查 nils。例如,假设您要将 String 变量的内容打印到控制台:

let x: String?
print("\(x)")

如果您改为初始化变量,它会打印出您可能不会想到的内容:

let x: String? = "Test"
print("\(x)") // Prints "Optional("Test")"

发生这种情况是因为 xOptional 而不是 String 类型。要解决这个问题,您可以使用感叹号强制展开:

print("\(x!)") // Prints "Test"

关于swift - 为什么在此示例中使用强制展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com