注意:请原谅我的无知,在这方面我还是个新手。 完整的代码张贴在底部。
问题:当我有一个较短的嵌套时,我似乎能够为@published属性调用它,但是当我尝试一个具有较长嵌套的api请求时,就像这样。 并在GET请求的结构之后键入可解码结构
struct TripScheduleTest: Codable {
let TripList: InitialNest
}
struct InitialNest: Codable {
var Trip: [TravelDetail]
}
struct TravelDetail: Codable {
var Leg: [TripTest]
}
struct TripTest: Codable, Hashable {
var name: String
var type: String
}
我无法为@published var dataSet1=[TripTest]()
调用它
self.dataSet1 = tripJSON.TripList.Trip.Leg
我收到一条错误消息,说“类型'[TravelDetail]'的值没有成员'LEG'”
我不知道为什么,但是当我在@published var中使用[TravelDetail]()
而不是[TripTest]()
,并且在dataSet1的Leg之前停止Trip时,它至少可以成功构建。 但现在我无法从请求中获取名称和类型信息
全码
import SwiftUI
struct TripScheduleTest: Codable {
let TripList: InitialNest
}
struct InitialNest: Codable {
var Trip: [TravelDetail]
}
struct TravelDetail: Codable {
var Leg: [TripTest]
}
struct TripTest: Codable, Hashable {
var name: String
var type: String
}
class TripViewModel: ObservableObject {
@Published var dataSet1 = [TripTest]()
init() {
let urlString = "http://xmlopen.rejseplanen.dk/bin/rest.exe/trip?originId=8600790&destId=6553&format=json"
guard let url = URL(string: urlString) else { return }
URLSession.shared.dataTask(with: url) { (data, resp, err) in
guard let data = data else { return }
do {
let tripJSON = try
JSONDecoder().decode(TripScheduleTest.self, from: data)
print(data)
DispatchQueue.main.async {
self.dataSet1 = tripJSON.TripList.Trip.Leg
}
} catch {
print("JSON Decode error: ", error)
}
}.resume()
}
}
struct TripView: View {
@ObservedObject var vm = TripViewModel()
var body: some View {
List(vm.dataSet1, id: \.self) { day in
Text("Test")
.font(.system(size: 12, weight: .bold))
Text(" \(day.name)")
.font(.system(size: 12))
}
}
}
trip
是数组(请注意[]
)
例如,您需要通过索引获取数组的一项
tripJSON.TripList.Trip.first?.Leg
但是由于dataset1
声明为[TravelDetail]
,您必须分配
self.dataSet1 = tripJSON.TripList.Trip