Swift属性包装器。参照分配
我想在类之间共享一个字符串,并使对该字符串所做的修改保持同步 我想做一个属性包装,比如:Swift属性包装器。参照分配,swift,string,reference-type,Swift,String,Reference Type,我想在类之间共享一个字符串,并使对该字符串所做的修改保持同步 我想做一个属性包装,比如: @propertyWrapper class StringHolder { var wrappedValue: String? init(wrappedValue: String?) { self.wrappedValue = wrappedValue } } 然后使用它: @StringHolder var sharedString: String = "testStrin
@propertyWrapper class StringHolder {
var wrappedValue: String?
init(wrappedValue: String?) {
self.wrappedValue = wrappedValue
}
}
然后使用它:
@StringHolder var sharedString: String = "testString"
let anotherClass = AnotherClass()
anotherClass.sharedString = sharedString
anotherClass.sharedString = "modified"
//sharedString is still "testString"
问题是,在分配sharedString时,只会重新设置包装的值。
是否可以通过引用两个属性来分配相同的包装器?否,这种方式行不通。从技术上讲,您可以将某种标识符放在包装器中,并使用相同的标识符共享包装值(例如,使用共享字典),但您仍然必须以某种方式指定哪些属性使用相同的包装器,这只会使功能更不可读。在这种情况下,最好的解决方案是自定义类wapper,而不是属性包装器。相信我,代码也会更容易阅读。若您要查找
字符串的引用类型行为,可以使用NSString
。正如@Sulthan所说,我最终得到了一个普通的类来包装该值。也许更不言自明。谢谢你的评论。不,这样不行。从技术上讲,您可以将某种标识符放在包装器中,并使用相同的标识符共享包装值(例如,使用共享字典),但您仍然必须以某种方式指定哪些属性使用相同的包装器,这只会使功能更不可读。在这种情况下,最好的解决方案是自定义类wapper,而不是属性包装器。相信我,代码也会更容易阅读。若您要查找字符串的引用类型行为,可以使用NSString
。正如@Sulthan所说,我最终得到了一个普通的类来包装该值。也许更不言自明。谢谢你的评论。