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

标签 ios xcode swift option-type

我在看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/

相关文章:

ios - 如何向 Xcode 中的 XCTestCase 单元添加辅助方法?

iOS9 SKPaymentQueue 相关问题 - 应用返回前台时事务意外终止

c - 这个简单的 C 程序有什么问题?

swift - 如何在 Swift 中为不同类型的 Action 创建继承类?

ios - APNS注册及其生命周期

Swift 4.2 奇怪的 -.map- 行为

ios - 如何编写带有参数的url请求以便返回字符串?

ios - 向所有 UIViewControllers 添加变量

ios - 无法从选项卡栏 Controller 访问导航栏

ios - 如何在 Firebase 中推送多种类型的数据?