2016-07-03 10 views
0
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) 
     } 
    } 
} 

以下のようなエラーです。値の型の場合、この問題を克服する方法は?あなたの提案を感謝します。

enter image description here

答えて

0

エラーメッセージが示しているように、objc_getAssociatedObject(_:_:)objc_setAssociatedObject(_:_:_:_:)とは、最初の引数としてAnyClassを必要とします。 Swift構造体はAnyClassとして使用できません。

構造体を扱うerrorInfoを別の方法で保存すると考えてください。 あなたは構造体のプロパティとしてそれを持っていませんか?

0

...下記のようにコンパイルエラーが表示されます。値の型の場合、この問題を克服する方法は?

コンパイルエラーを解決することはできません。あなたはリンゴとオレンジを混ぜようとしています。 objc_getAssociatedObjectは、定義上、Objective-Cである。しかし、Objective-CはSwiftの構造体を何も知らない。おそらくそれらを見ることはできません。それが知っているのは、オブジェクトというクラスとそのインスタンスです。 Swift構造体で作業するには、Objective-Cランタイムを使用することはできません。あなたは完全にSwift内で操作する必要があります。

関連する問題