私はThoughtbotのArgoフレームワークを使用してJSONオブジェクトをモデルに解析しています。Argoのジェネリック型のデコード
私はそう
protocol SomeProtocol {
associatedtype Model
func foo()
}
extension SomeProtocol where Model: Decodable {
func foo() -> Model? {
// someJSON is AnyObject in this case, say, from a network call
guard let model: Model = decode(someJSON) else { return nil }
return model
}
}
のようなプロトコルとその拡張子を持って問題に実行していることだし、このプロトコルに準拠したクラスは、この
class SomeClass: SomeProtocol {
typealias Model = ArgoModel
func bar() {
print(foo())
}
}
とモデルのようになりますこのように
struct ArgoModel {
let id: String
}
extension ArgoModel: Decodable {
static func decode(j: AnyObject) -> Decoded<ArgoModel> {
return curry(self.init)
<^> j <| "id"
}
}
(これらのカレーライブラリも使用していますが、ini tメソッド)
私が抱えている問題は、SomeProtocol拡張で、関連する型ModelがArgoによってデコードできないということです。私が得るエラーは
No 'decode' candidates produced the expected contextual result type 'Self.Model?'
です。これはSwift型システムの制限ですか?それとも私は行方不明のものがありますか?