Nac*_*t93 1 api json swift swiftui
我有一个来自 API 的 JSON。我需要将其中的值显示为文本。
这是其中的一部分。
]
{
"d": "2019-09-20",
"v": 56.62
},
{
"d": "2019-09-23",
"v": 56.93
}
]
Run Code Online (Sandbox Code Playgroud)
现在,我为它创建了模型,称为Dolar.swift.
struct Dolar: Decodable {
var d: String?
var v: Double?
}
Run Code Online (Sandbox Code Playgroud)
还有一个名为的类WebService.swift将处理调用:
class WebService {
func getCurrency(completion: @escaping (Dolar?) -> ()) {
guard let url = URL(string: "https://api.estadisticasbcra.com/usd_of") else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data, error == nil else {
return
}
let currencyResponse = try? JSONDecoder().decode(Dolar.self, from: data)
if let currencyResponse = currencyResponse {
let dolar = currencyResponse
print(dolar)
completion(dolar)
} else {
completion(nil)
}
}.resume()
}
}
Run Code Online (Sandbox Code Playgroud)
API 的文档说它需要在请求中添加一个 TOKEN:
Authorization: BEARER {TOKEN}
Run Code Online (Sandbox Code Playgroud)
我怎么做?我有令牌,但不知道如何实现它。这是我的第一个问题。其次,一旦我获得了价值,我该如何在ContentView.swift? 任何帮助表示赞赏。
对于问题的第一部分,您需要使用它的变体URLSession.dataTask,需要一个URLRequest. 然后您需要检查响应是否具有有效负载,它可以被解码为您的类型,并且它至少有一个值。就像是:
let request = URLRequest(url: url)
request.setValue(token, forHTTPHeaderField: "Authorization")
// Or maybe:
// request.setValue("BEARER {\(token)}", forHTTPHeaderField: "Authorization")
URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data else {
return // Couldn't get data from service
}
guard let values = JSONDecoder().decode([Dolar].self, from: data) else {
return // Couldn't decode data as array of `Dolar`s
}
guard let finalValue = values.last else {
return // No values in data
}
// `finalValue` now describes the last element in your array
}.resume()
Run Code Online (Sandbox Code Playgroud)
请参阅URLSession和URLRequest的文档
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |