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 非测试版
我试图从 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
谢谢
这种方法有两个错误。首先,如果您使用
创建了一个 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 非测试版