1

我指的是关于在 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 不必对每个类实例都是唯一的?

谢谢,

4

0 回答 0