В настоящее время я пытаюсь изучить JSON, начиная с локального Data
в файле .json
в моем приложении. Следуя инструкциям онлайн, я строю образец строки, которую затем помещаю в список. Data
происходит из .json
файла, который я создал в правильном формате.
Когда я пытаюсь просмотреть работу в Canvas, я получаю сообщение об ошибке:
Невозможно выполнить предварительный просмотр в этом файле - возможно, произошел сбой JSON Practice.app.
Я новичок в SwiftUI, а также в динамических списках и данных JSON, так что, возможно, кто-то из сообщества может показать мнегде я иду не так. Я везде смотрел онлайн, но не смог найти ответ на свой вопрос.
Искал в сети похожие проекты или учебные пособия, так что пока я не вижу никакой разницы в коде. Я также проверил SwiftUI Tutorials
от Apple для Списков и Навигации, который показывает, как локально читать данные из файла JSON, но, хотя я использую почти такой же код, я получаю эту ошибку.
Мой JSONФайл выглядит следующим образом:
[
{
"id": 0,
"name": "Salzburg",
"image": "salzburg",
"detail": "A small but beautiful Town in upper Austria",
},
{
"id": 1,
"name": "Vienna",
"image": "Vienna",
"detail": "The Capital of Austria",
},
{
"id": 2,
"name": "Linz",
"image": "Linz",
"detail": "The third largest town in Austria",
}
]
Файл My Data выглядит следующим образом:
import SwiftUI
let citiesData: [City] = load("cities.json")
func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
Файл My Decoder (не уверен, так ли это называется) Файл выглядит следующим образом:
import SwiftUI
struct City: Hashable, Codable, Identifiable {
var id: Int
var name: String
var image: String
var detail: String
}
И мой файл строки выглядит следующим образом:
import SwiftUI
struct CityRow: View {
var city: City
var body: some View {
Text(city.name)
}
}
struct CityRow_Previews: PreviewProvider {
static var previews: some View {
CityRow(city: citiesData[1])
}
}
При предварительном просмотре файла строки в нем должно быть указано название первого города, но вместо этого выдается ошибка, как указано выше.