[英]Swift protocol extensions for Value(Structures) types
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)
}
}
}
我的目标是为协议KZClientResponse提供默认植入,并且Xcode给我一个如下的编译错误。 对于值类型,如何克服这个问题? 感谢您的建议。
如错误消息所示, objc_getAssociatedObject(_:_:)
和objc_setAssociatedObject(_:_:_:_:)
需要AnyClass
作为第一个参数。 您不能将Swift结构用作AnyClass
。
考虑另一种存储与结构一起使用的errorInfo
方法。 为什么没有它作为结构的属性?
...给我一个如下的编译错误。 对于值类型,如何克服这个问题?
您无法克服编译器错误。 您正在尝试将苹果与橙子混合。 根据定义, objc_getAssociatedObject
是Objective-C。 但是Objective-C对Swift结构一无所知。 它不可能看到他们。 它唯一知道的是它所谓的对象 -即类及其实例。 要使用Swift结构,您完全不能使用Objective-C运行时:您必须完全在Swift本身内进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.