为什么我们可以显式地解包这个可选的而不用担心崩溃?

Why can we explicitly unwrap this optional without worrying about a crash?

我在看 this 视频,在第 2 分钟时他解释了一些我真的不明白的东西。

代码:

class Order {
    var product: Product?
}

class Product {
    var order: Order?
}

var myOrder = Order()
var iPhone6 = Product()

myOrder.product = iPhone6
myOrder.product!.order = myOrder

他说,在谈论显式解包时,如果 属性 为空,语句将不会崩溃并获得空引用。他说,如果产品在显式展开时恰好为零,则该声明将无效。我认为这是使用问号的情况,例如 myOrder.product?.order,但不是感叹号。

直接回答您的问题 - 在这里您确定要创建 Order 实例,因此您不必检查 nil。但在其他情况下,您必须检查 nil.

这里让我困扰的是你会有一个保留周期。因此,为了避免保留循环,您可以做的是在 Product class 中保持对 Order 实例的弱引用(订单应该始终有一个产品,但一个产品可以没有订单).像这样:

class Product {
    weak var order: Order?
}