为什么我们可以显式地解包这个可选的而不用担心崩溃?
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?
}
我在看 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?
}