为什么在这个例子中使用force unwrapping?

jja*_*eko 3 optional swift

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

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

john.residence!.address = johnsAddress
Run Code Online (Sandbox Code Playgroud)

以上示例位于Apple语言指南中.

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

这个例子!和之间是否存在差异??

Ant*_*nio 9

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

相反,正常的展开是有条件的.如果john.residence是nil,则忽略之后的任何内容,并且不会生成错误(请参阅可选链接).该陈述根本不做任何事情,因此不会发生任何分配.

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

let x: String?
print("\(x)")
Run Code Online (Sandbox Code Playgroud)

如果您初始化变量,它将打印您可能不会期望的内容:

let x: String? = "Test"
print("\(x)") // Prints "Optional("Test")"
Run Code Online (Sandbox Code Playgroud)

这x是因为是一个Optional而不是一个String类型.要解决此问题,请使用感叹号强制解包:

print("\(x!)") // Prints "Test"
Run Code Online (Sandbox Code Playgroud)