Swift如何在属性属性中实现ARC?例如,如何让我的String变量在Swift中使用copy而不是strong?
答案 0 :(得分:18)
如果需要Objective-C中的@NSCopying
行为,可以使用copy
属性。
将此属性应用于类的存储变量属性。这个 属性导致属性的setter与副本合成 属性的值 - 由copyWithZone方法返回 - 而不是 财产本身的价值。财产的类型必须 符合NSCopying协议。
NSCopying属性的行为方式与Objective-C类似 复制属性属性。
但是,在String
属性的特定情况下,没有必要这样做。
字符串是Swift中的值类型。因此,当将现有String
分配给新变量时,该变量实际上存储了String的副本,而不是对现有变量的引用。
Swift的String类型是值类型。如果您创建一个新的String值, 将String值传递给函数或方法时复制它, 或者当它被分配给常数或变量时。在每种情况下,一个新的 创建现有String值的副本,新副本为 传递或分配,而不是原始版本。
因此,当您具有要使用复制行为设置的引用类型的属性时,将使用@NSCopying
属性。