【发布时间】:2020-12-25 10:19:31
【问题描述】:
在使用 dataTaskPublisher 和从 API 中提取数据方面取得了各种成功。 我遇到的问题是嵌套 JSON。我可以获取简单的 JSON,但是像 Pokemon API 这样嵌套 JSON 的东西让我很着迷。
任何建议都会很棒。 onappear: // 获取完成是我挂断的部分。
import SwiftUI
import Combine
struct Pokemon: Codable {
var cards: Card
}
struct Card: Codable {
var id: String
var name: String
}
struct ContentView: View {
@State private var requests = Set<AnyCancellable>()
@State var pokemon: Pokemon
var body: some View {
VStack {
Text("card name here")
}
.onAppear {
let url = URL(string: "https://api.pokemontcg.io/v1/cards")!
self.fetch(url, defaultValue: [Pokemon]()) {
self.pokemon = $0
}
}
}
func fetch<T: Decodable>(_ url: URL, defaultValue: T, completion: @escaping (T) -> Void) {
let decoder = JSONDecoder()
URLSession.shared.dataTaskPublisher(for: url)
.retry(1)
.map(\.data)
.decode(type: T.self, decoder: decoder)
.replaceError(with: defaultValue)
.receive(on: DispatchQueue.main)
.sink(receiveValue: completion)
.store(in: &requests)
}
}
【问题讨论】:
标签: json swift api parsing networking