0
我試圖從JSON數據解碼爲使用的Argo(https://github.com/thoughtbot/Argo)一個非常通用的結構進行解碼:試圖陣列,阿爾戈
struct ValueBox<T: Decodable where T == T.DecodedType> {
let value: T
}
extension ValueBox: Decodable {
static func decode(json: JSON) -> Decoded<ValueBox> {
let r = curry(ValueBox.init)
<^> json <| "value"
return r
}
}
extension Array: Decodable {
public typealias DecodedType = Array<Element>
}
extension Array {
public static func decode(json: JSON) -> Decoded<Array<Element>> {
return Decoded<Array>.customError("not implemented")
}
}
這編譯。我知道如果T是一個數組,它將無法解碼ValueBox。但這是第二個問題。
如果我現在嘗試使用阿爾戈解碼:
func testExample() {
let jsonDict_Int: [String : AnyObject] = [
"value" : 5
]
let jsonDict_IntArray: [String : AnyObject] = [
"value" : [5]
]
let intBox: Decoded<ValueBox<Int>> = decode(jsonDict_Int)
let intArrayBox: Decoded<ValueBox<Array<Int>>> = decode(jsonDict_IntArray)
}
我得到一個編譯器錯誤「Array<Int>
不符合協議‘可解’」。但爲什麼?我提供了擴展以使其符合,或者我錯過了明顯的東西?
正如我所說的,這是問題編號2,但它是困難的,因爲<||會解碼爲[T],T已經是陣列。 –
是的,但你不能那樣做。你必須爲數組做一些特殊的事情。因爲當你做ValueBox>他試圖把T作爲數組,並且編譯器想要[T]作爲數組。 –