我收到以下错误:
序列化json typeMismatch时遇到错误(Swift.Dictionary,Swift.DecodingError.Context(codingPath:[],debugDescription:“预计会解码Dictionary而不是找到一个数组。”,underlyingError:nil))
代码:
//---------------
struct Currency: Decodable {
let symbol: String
let price: String
}
var myDict: [Currency] = []
//---------------
func testParse(){
let jsonUrlString = "https://api.binance.com/api/v3/ticker/price"
guard let url = URL(string: jsonUrlString) else
{ return }
URLSession.shared.dataTask(with: url) { (data,response,err) in
guard let data = data else
{
print("Error: No data to decode")
return
}
do
{
let exchanges = try
JSONDecoder().decode(Currency.self, from: data)
let X: [Currency] = [exchanges]
self.myDict = X
self.testFunc()
print("binance: "+self.myDict[0].symbol + ": "+self.myDict[0].price)
}
catch let jsonErr
{
print("Error serialising json",jsonErr)
}
}
.resume()
}
我的struct布局有问题吗?或者它是我解析的方式?我希望在这里有更好的理解,以备将来参考。因此,如果有人可以链接一个好的Swift 4指南,我将不胜感激。或者,如果你能给我一个很好的答案(而不是用勺子喂我不学的答案)。
答案 0 :(得分:1)
请仔细阅读错误消息并学会理解。它非常清楚。
预计解码字典但找到一个数组
换句话说:您想要解码字典(minimum_should_match
)但实际上它是一个数组(Currency
)。
就[Currency]
而言,字典是目标结构或类。
请不要将对象命名为Decodable
,这实际上是一个数组。
...dict