Please, help! I worked only with very basic JSON's and have some troubles with this.
JSON (Valid):
[
{
"title": "Winter",
"coverImage": "https://firebasestorage.googleapis.com/v0/b/lightkitpresetsapp.appspot.com/o/Presets%2FWinter%2Fwinter-cover.png?alt=media&token=1ba8c8ae-ce7b-41fd-beca-0dc8dd7334cd",
"isPremium": false,
"isNewKit": true,
"kitItems": [
{
"number": 0,
"beforeImageURL": "https://firebasestorage.googleapis.com/v0/b/lightkitpresetsapp.appspot.com/o/Presets%2FWinter%2Fwinter-1%2Fwinter-1-before.jpg?alt=media&token=391665de-d6c3-4d52-a344-fa6197836e11",
"afterImageURL": "https://firebasestorage.googleapis.com/v0/b/lightkitpresetsapp.appspot.com/o/Presets%2FWinter%2Fwinter-1%2Fwinter-1-after.jpg?alt=media&token=16c28047-2490-4dee-9311-8d4bf2eb36f1",
"dngURL": "https://firebasestorage.googleapis.com/v0/b/lightkitpresetsapp.appspot.com/o/Presets%2FWinter%2Fwinter-1%2Fwinter-1-preset-file.dng?alt=media&token=eb3642f3-c774-420d-9a2f-86388dbb3bf9"
}
]
}
]
Structs:
struct PresetKit: Codable, Hashable {
let title: String
let coverImage: String
let isPremium, isNewKit: Bool
let kitItems: [PresetKitItem]
}
struct PresetKitItem: Codable, Hashable {
let number: Int
let beforeImageURL, afterImageURL: String
let dngURL: String
}
ViewModel:
class ViewModel: ObservableObject {
@Published var presets: [PresetKit] = []
func fetch() {
guard let url = URL(string: "https://presetsapp.zapps.tech/presets-test.json") else {
return
}
let task = URLSession.shared.dataTask(with: url) { [weak self] data, _, error in
guard let data = data, error == nil else {
return
}
//: Covert to JSON
do {
let presets = try JSONDecoder().decode([PresetKit].self, from: data)
DispatchQueue.main.async {
self?.presets = presets
}
}
catch {
print(error)
}
}
task.resume()
}
}
An empty array as a result, but I don't know why. Please, help!