我指的是关于在 Swift 中模拟存储属性的问题,以及来自 jou 的答案:
如何像在 Objective-C 上一样在 Swift 中存储属性?
目前我正在使用该答案通过以下方式将自定义属性添加到 MPMediaItemCollection:
file: Extension.swift
private var xoAssociationKey1: UInt8 = 0
private var xoAssociationKey2: UInt8 = 0
extension MPMediaItemCollection {
var customTag: UInt64? {
get {
return objc_getAssociatedObject(self, &xoAssociationKey1) as? UInt64
}
set(newValue) {
objc_setAssociatedObject(self, &xoAssociationKey1, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
var customString: String? {
get {
return objc_getAssociatedObject(self, &xoAssociationKey2) as? String
}
set(newValue) {
objc_setAssociatedObject(self, &xoAssociationKey2, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
朱写道:
关联键是一个指针,对于每个关联应该是唯一的。为此,我们创建了一个私有全局变量,并使用它的内存地址作为 & 运算符的键。
我不明白的是,为什么这是每个 MPMediaItemCollection 实例的唯一键?MPMediaItemCollection 上的每个实例不会使用同一个私有全局变量 xoAssociationKey1/2 的内存地址,因此不是唯一的,这会破坏这个设计吗?还是我错过了有关关联对象的某些内容,并且 xoAssociationKey1/2 不必对每个类实例都是唯一的?
谢谢,