[英]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.