为什么我们可以在不担心崩溃的情况下明确解包这个可选项?

时间:2015-07-22 07:02:20

标签: ios xcode swift optional

我正在观看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

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

1 个答案:

答案 0 :(得分:2)

直接提出您的问题 - 在此您确定要创建Order个实例,这样您就不必检查nil。但在其他情况下,您必须检查nil

让我感到困扰的是,您将拥有保留周期。因此,为避免保留周期,您可以做的是对Order类中的Product实例保持弱引用(订单应始终包含产品,但产品可以没有订单)。像这样:

class Product {
    weak var order: Order?
}