我在看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,则语句不会崩溃并获得 null 引用。他说,如果产品在显式展开时恰好为零,则该声明将无效。我认为这是使用问号的情况,例如 myOrder.product?.order
,但不是感叹号。
最佳答案
直奔你的问题 - 在这里你肯定会创建你的 Order
实例,这样你就不必检查 nil
。但在其他情况下,您将必须检查 nil
。
这里让我困扰的是你将有一个保留周期。因此,为了避免保留循环,您可以做的是在 Product
类中保持对 Order
实例的弱引用(订单应该始终有产品,但产品可以没有订单)。像这样:
class Product {
weak var order: Order?
}
关于ios - 为什么我们可以显式地解包这个可选的而不用担心崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556060/