我想在 Swift 中为对象设置n
关联对象的数量
我的理解是UnsafeRawPointer
参考的通常模式是这样的......
static var reference = "someRef"
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
objc_setAssociatedObject(myObject, &reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
但这不适用于n
呼叫add(to:)
同样,如果我每myObject
只调用一次,下面的代码工作正常。但是,如果我以相同的方式添加另一个关联的对象......它将第一个ThingToAdd
替换为第二个。内联构建唯一的字符串不起作用。在模拟器上很好,但在设备上则不然。
public func add(to myObject: AnyObject) {
let adding = ThingToAdd()
var reference = "objectref(UUID().uuidString)".replacingOccurrences(of: "-", with: "")
objc_setAssociatedObject(myObject, reference, adding, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
我知道这是不正确的,但是我不知道如何创建n
数量的UnsafeRawPointers
以存储具有唯一引用的关联对象。
任何帮助/解释将不胜感激。
将reference
传递给objc_setAssociatedObject
的key: UnsafeRawPointer
参数会将变量存储的地址传递给该函数。
全局变量和静态成员变量(并且仅保证具有这些变量(具有固定地址。
在第一个版本中,对具有相同键objc_setAssociatedObject
的第二个和所有后续调用将替换以前的关联。
在第二个版本中,局部变量的地址作为键传递。该地址在后续呼叫中可能相同,也可能不同。请注意,字符串的内容无关紧要,键只是一个指针,即该变量的地址。
如果您需要将可变数量的值与给定对象相关联,那么我建议关联单个NSMutableArray
(或NSMutableDictionary
(并将值添加到该数组或字典中。