попробуйте следующее: (решение с блоком завершения, которое вы должны использовать, если вы загружаете что-то asyn c в функцию)
struct Cat: Codable {
let name, gender, age, welcomeDescription: String
let breed, itype, status, arrivalDate: String
let arrivalDetails, medicalHistory, vaccinations: String
let isMicrochipped: Bool
let fleaControlDate, dewormingDate, fivFelvDate, specialNeeds: String
let personality: [Int]
let morePersonality, comments, personalExp: String
enum CodingKeys: String, CodingKey {
case name, gender, age
case welcomeDescription = "description"
case breed, itype, status
case arrivalDate = "arrival_date"
case arrivalDetails = "arrival_details"
case medicalHistory = "medical_history"
case vaccinations
case isMicrochipped = "is_microchipped"
case fleaControlDate = "flea_control_date"
case dewormingDate = "deworming_date"
case fivFelvDate = "fiv_felv_date"
case specialNeeds = "special_needs"
case personality
case morePersonality = "more_personality"
case comments
case personalExp = "personal_exp"
}
}
typealias Cats = [Cat]
struct ContentView : View {
@State var cats: Cats = []
// @State var myTask
func load(_ linkname: String, completion:@escaping (Cats)->()) {
let url = URL(string: "https://tmha-backend.herokuapp.com/api/cats/")
guard let requestUrl = url else {fatalError("Couldn't find \(linkname)")}
var request = URLRequest(url: requestUrl)
// Specify HTTP Method to use
request.httpMethod = "GET"
request.setValue("application/json", forHTTPHeaderField: "Accept")
// Send HTTP Request
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data else { return }
do {
var returnValue: Cats?
let decoder = JSONDecoder()
returnValue = try decoder.decode(Cats.self, from: data)
completion(returnValue!)
} catch {
fatalError("Couldn't parse \(linkname) as \(Cat.self):\n\(error)")
}
}
task.resume()
return
}
var body : some View {
List(cats, id: \.name) { cat in
Text(cat.name)
}.onAppear() {
self.load("https://tmha-backend.herokuapp.com/api/cats/") { cats in
self.cats = cats
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}