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 给我一个编译错误,如下所示。对于值类型,如何克服这个问题?感谢您的建议。
最佳答案
如错误消息所示,objc_getAssociatedObject(_:_:)
和 objc_setAssociatedObject(_:_:_:_:)
需要 AnyClass
作为第一个参数。您不能将 Swift 结构用作 AnyClass
。
考虑另一种方式来存储与结构一起使用的errorInfo
。
为什么不将它作为结构的属性?
关于值(结构)类型的 Swift 协议(protocol)扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172184/