值(结构)类型的 Swift 协议(protocol)扩展

标签 swift swift-protocols

public struct KZErrorInfo: Unboxable {

var statusCode = -1
var status: String?
var errorMessage: String?

public init() {

}

public init(unboxer: Unboxer) {
    self.statusCode = unboxer.unbox("StatusCode")
    self.status = unboxer.unbox("Status")
    self.errorMessage = unboxer.unbox("Message")
}

}

protocol KZClientResponse: ETClientResponse {

var errorInfo: KZErrorInfo? { get set }

}

var errorInfo: KZErrorInfo? {
    get {
        if let value = objc_getAssociatedObject(self, &xoAssociationKeyErrorInfo) as? KZErrorInfo {
            return value
        }
        return nil
    }
    set(newValue) {
        if let error = newValue {
           objc_setAssociatedObject(self, &xoAssociationKeyErrorInfo, error, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
        }
    }
}

我的目标是为协议(protocol) KZClientResponse 进行默认植入,Xcode 给我一个编译错误,如下所示。对于值类型,如何克服这个问题?感谢您的建议。

enter image description here

最佳答案

如错误消息所示,objc_getAssociatedObject(_:_:)objc_setAssociatedObject(_:_:_:_:) 需要 AnyClass 作为第一个参数。您不能将 Swift 结构用作 AnyClass

考虑另一种方式来存储与结构一起使用的errorInfo。 为什么不将它作为结构的属性?

关于值(结构)类型的 Swift 协议(protocol)扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172184/

相关文章:

ios - 将 UIContainerView 嵌入 TableView 并尝试通过 @IBOutlet 访问导致意外发现 nil

swift - 使用默认参数值声明协议(protocol)函数

swift - 创建从多个协议(protocol)继承的协议(protocol)类型的对象时出错

ios - 如何检测单元格是否添加角标(Badge)?

swift - Swift 中 void -> (void) 的含义是什么?

swift - 附近设备的 iOS 蓝牙 mac 地址

swift - Unexpected Cannot assign to property 'self' is immutable compile time error IN CLASS

ios - 如何在我的协议(protocol)中正确使用 associatedType

swift - 使用协议(protocol)中定义的默认参数实现函数

swift - NSPopUpButton 子类 attributedTitle