斯威夫特:无财产

TL; DR:UnownedProperties.playground

我们研究了从强到弱到懒惰的各种属性,以及如何观察它们。 接下来是无人财产。 这是一种属性,您可以避免长时间使用而不会遇到任何麻烦。 在过去的一年中,尽管有充分的理由使用它,但我并没有强烈地需要一次使用该无用功能。

无财产的主要目的是防止保留周期。 它的工作原理类似于弱属性,但主要区别在于,弱属性必须是可选的,而无主属性必须是非可选的。 它与弱属性的共同之处在于,无所有权的属性不会增加保留数,这就是为什么它被用来防止保留周期。 它有效地允许使用非可选属性,而无需增加引用的保留计数。

对于代码示例,我创建了一些类来表示乘客,驾驶员和出租车。 出租车的每个实例都需要驾驶员,而乘客是可选的。 Taxi类包含一个函数,该函数允许将驱动程序属性更改为另一个驱动程序,但无法将该属性设置为nil。 本质上,我们要强制执行的逻辑由编译器维护。

但这很危险。 如果基础价值消失了,那么在Taxi实例中该值将突然为零,因为Taxi实例并未保留该值。 在示例游乐场中,将驱动程序设置为nil的行被注释掉,因为使用nil值打印Taxi实例将导致运行时异常。

对于每天使用无人财产的情况,您可以考虑将闭包保留在自身上的时间过长,从而导致保留周期。 Hector Matos的详细示例对此进行了详细介绍。 重要的是要理解何时可以使用弱者或无人者。 以“驾驶员和出租车”示例为例,规则是没有驾驶员就不能存在出租车。 它根本无法操作来接载乘客。 另一个示例是始终要求银行客户存在的信用卡。

使用无财产时要谨慎。 它们可能是您应用程序中的隐藏杀手。 如有疑问,只需使用弱属性并在使用可选属性之前将其拆开即可。 那是安全的方法。

下一页:枚举和模式匹配

GitHub Gist