Ios 为什么我们可以在不担心崩溃的情况下显式地打开此可选文件?

Ios 为什么我们可以在不担心崩溃的情况下显式地打开此可选文件?,ios,xcode,swift,optional,Ios,Xcode,Swift,Optional,我在看视频,在2分钟的时候,他解释了一些我真的不明白的事情 代码: 他说,当谈到显式展开时,如果属性为null,则语句不会崩溃并获得null引用。他说,如果产品在明确拆开包装后恰好为零,则该声明将无效。我认为使用问号是这样的,比如myOrder.product?.order,但不使用感叹号 直接回答您的问题-在这里,您确定要创建订单实例,这样您就不必检查nil。但在其他情况下,您必须检查nil 让我烦恼的是你会有一个循环。因此,可以避免保留循环的方法是在Product类中保留对Order实例的弱

我在看视频,在2分钟的时候,他解释了一些我真的不明白的事情

代码:


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

直接回答您的问题-在这里,您确定要创建
订单
实例,这样您就不必检查
nil
。但在其他情况下,您必须检查
nil

让我烦恼的是你会有一个循环。因此,可以避免保留循环的方法是在
Product
类中保留对
Order
实例的弱引用(订单应该总是有产品,但产品可以没有订单)。大概是这样的:

class Product {
    weak var order: Order?
}

如果没有为
myOrder.product
指定(非零)值,则
myOrder.product!。订单=myOrder
崩溃。你可以自己很容易地验证这一点。这正是视频中的那个家伙所做的,创建了一个保留周期,并通过进行精确的更改来解决它。谢谢对于他所说的,我唯一不明白的是,“如果产品在显式展开时恰好为零,则声明将无效。”首先,它永远不会为零,其次,如果是,它将崩溃。那么他这么说是什么意思呢?我相信他指的是当你不知道一个可选项是否为零时的场景,特别是这个场景。对,但在那个场景中,你会使用
而不是
正确?如果您使用
,那么您将拥有所谓的
可选链接
,是的,您可以使用它。如果
产品
为零,您将无法设置
订单
,而不会发生运行时崩溃。
class Product {
    weak var order: Order?
}