gpt4 book ai didi

arrays - 尝试用 Argo 解码数组

转载 作者:行者123 更新时间:2023-11-30 13:29:22 24 4
gpt4 key购买 nike

我正在尝试使用 Argo ( https://github.com/thoughtbot/Argo ) 将 JSON 中的数据解码为非常通用的结构:

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。但这是第二个问题。

如果我现在尝试使用 Argo 进行解码:

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> 不符合协议(protocol)‘Decodable’”。但为什么?我提供了扩展以使其符合要求,还是我遗漏了一些明显的东西?

最佳答案

对于第二个例子,我认为你必须使用 <^> json <|| "value"而不是<^> json <| "value"

When you use an Array of value you must use the operator <||

a great link to the detailed Argo's documentation

关于arrays - 尝试用 Argo 解码数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36746415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com