0

我的代码:

public protocol ApiRequestBaseObjProtocol {
    var param:[String:Any] { get set }
    var path:String {get}
}

extension ApiRequestBaseObjProtocol {
    var param: [String : Any] {
        get {
            var key = "\(self.path)"
            return (objc_getAssociatedObject(self, &key) as? [String : Any]) ?? [:]
        }
        set(newValue) {
            var key = "\(self.path)"
            objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}

enum MeApi : ApiRequestBaseObjProtocol {
    public var path: String {
        return "test/api/xxx"
    }
}

在参数 get{} 方法中:objc_getAssociatedObject(self, &key) 为 nil。我想知道为什么?谢谢你!!

4

1 回答 1

1

您正在创建两个单独的键,因此您&key指向 getter 和 setter 中的两个不同的东西。尝试将您创建key为静态常量。每个NSHipster

通常建议它们的键是静态字符,或者更好的是指向一个字符的指针。基本上,保证在 getter 和 setter 中使用的任意值是恒定的、唯一的和范围内的:

于 2020-06-30T08:43:41.593 回答