ПРИМЕЧАНИЕ: Простите мою невежественность, я все еще новичок в этом отношении. Полный код размещен внизу.
ПРОБЛЕМА: Кажется, что когда у меня короткое гнездо, я могу вызвать его для своего свойства @Published, однако, когда я пытаюсь выполнить запрос api с более длинным гнездом, вот так. и введите Decodable структуры, которые соответствуют структуре запроса 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»
Я не уверен, почему, но это работает, когда я использую [TravelDetail]()
вместо [TripTest]()
в @Published var и остановитесь на Trip перед Leg для dataSet1, тогда он, по крайней мере, построится успешно. Но теперь я не могу получить информацию об имени и типе из запроса
Полный код
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))
}
}
}