我正在使用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擴展中,Argo無法解碼associatedtype,Model。我得到的錯誤是
No 'decode' candidates produced the expected contextual result type 'Self.Model?'
這是Swift類型系統的限制嗎?還是有我失蹤的東西?