我正在观看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
,但不是感叹号。
答案 0 :(得分:2)
直接提出您的问题 - 在此您确定要创建Order
个实例,这样您就不必检查nil
。但在其他情况下,您必须检查nil
。
让我感到困扰的是,您将拥有保留周期。因此,为避免保留周期,您可以做的是对Order
类中的Product
实例保持弱引用(订单应始终包含产品,但产品可以没有订单)。像这样:
class Product {
weak var order: Order?
}