SwiftUI URLSession 取数据时报错(typeMismatch)WEBAPI

SwiftUI URLSession error when fetching data (typeMismatch) WEBAPI

我试图从 url 获取数据,一旦我按下按钮并调用该函数,但一旦调用该函数,我就会不断收到类型不匹配错误。

这是我的代码:

struct User: Decodable {
    var symbol: String
    var price: Double
}

struct Response: Decodable {
    var results:[User]
}


struct ContentView: View {
    var body: some View {
        VStack {
            Text("hello")
            Button(action: {
                self.fetchUsers(amount: 0)
            }) {
                Text("Button")
            }
        }

    }

    func fetchUsers(amount: Int) {
        let url:URL = URL(string: "https://api.binance.com/api/v3/ticker/price")!

        URLSession.shared.dataTask(with: url) { (data, res, err) in
            if let err = err { print(err) }
            guard let data = data else { return }
            do {
                let response = try JSONDecoder().decode(Response.self, from: data)
                print(response.results[0])
            } catch let err {
                print(err)
            }
        }.resume()
    }

}

这是错误:

typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary<String, Any> but found an array instead.", underlyingError: nil))

我试图从中获取数据的网站 url 是: https://api.binance.com/api/v3/ticker/price

我正在尝试从特定符号获取特定价格,例如 ETHBTC 的价格,即 0.019...

谢谢

这种方法有两个错误。首先,如果您使用

创建了一个 Response 结构
results = [User]

通过这种方式,您希望 json 的格式为 [result: {}] 但您的 [{}] 格式开头没有名称。所以你应该用

替换响应结构
typealias Response = [User]

您使用的所有 API 中的第二个是返回字符串而不是双倍价格,因此您应该将结构修改为:

struct User: Decodable {
    var symbol: String
    var price: String
}

这种方式对我有用。在

下测试
  • swift 5
  • xcode 11.3.1
  • iOS 13.3.1 非测试版