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所说,我最终得到了一个普通的类来包装该值。也许更不言自明。谢谢你的评论。