Я пытаюсь использовать один объектный файл JSON, хранящийся на веб-сайте. Я хочу отобразить одну из переменных (место) из файла JSON в тексте внутри ZStack. Однако есть проблема с определением переменной @State spotData. Ошибка SwiftUI: «Отсутствует аргумент для параметра« от »в вызове». Любая идея, что я делаю неправильно?
import SwiftUI
import CoreLocation
struct SpotStructure: Decodable {
var spot: String
var country_code: String
var is_weather_station: Bool
var month: [Int]
var day: [Int]
var weekday: [String]
var hour: [Int]
var current_wind: Int
var current_wind_direction: Int
var wind_speed: [Int]
var wind_gusts: [Int]
var wind_direction: [Int]
var wave_height: [Double]
var wave_period: [Int]
var wave_direction: [Int]
var weather_icon: [String]
var current_temperature: Int
var temperature: [Int]
private var coordinates: Coordinates
var locationCoordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: coordinates.latitude,
longitude: coordinates.longitude)
}
struct Coordinates: Hashable, Codable {
var latitude: Double
var longitude: Double
}
}
struct ContentView: View {
@State var spotData = SpotStructure()
func loadspotdata() {
if let url = URL(string: "https://raw.githubusercontent.com/Bene2907/Bene2907.github.io/master/brouwersdam.json") {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
do {
let res = try JSONDecoder().decode(SpotStructure.self, from: data)
spotData = res
} catch let error {
print(error)
}
}
}
}
}
var body: some View {
ZStack{
Text(spotData.spot)
}.onAppear(perform: loadspotdata)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Заранее спасибо!
Вы не можете инициализировать struct
без указания всех значений (поскольку все переменные не являются необязательными !
)
@State var spotData = SpotStructure(spot: <#T##String#>, country_code: <#T##String#>, is_weather_station: <#T##Bool#>, month: <#T##[Int]#>, day: <#T##[Int]#>, weekday: <#T##[String]#>, hour: <#T##[Int]#>, current_wind: <#T##Int#>, current_wind_direction: <#T##Int#>, wind_speed: <#T##[Int]#>, wind_gusts: <#T##[Int]#>, wind_direction: <#T##[Int]#>, wave_height: <#T##[Double]#>, wave_period: <#T##[Int]#>, wave_direction: <#T##[Int]#>, weather_icon: <#T##[String]#>, current_temperature: <#T##Int#>, temperature: <#T##[Int]#>, coordinates: <#T##Coordinates#>)
Или измените свой struct
и сделайте все переменные необязательными.
struct SpotStructure: Codable {
var spot: String? = nil
var country_code: String? = nil
var is_weather_station: Bool? = nil
var month: [Int]? = nil
var day: [Int]? = nil
var weekday: [String]? = nil
var hour: [Int]? = nil
var current_wind: Int? = nil
var current_wind_direction: Int? = nil
var wind_speed: [Int]? = nil
var wind_gusts: [Int]? = nil
var wind_direction: [Int]? = nil
var wave_height: [Double]? = nil
var wave_period: [Int]? = nil
var wave_direction: [Int]? = nil
var weather_icon: [String]? = nil
var current_temperature: Int? = nil
var temperature: [Int]? = nil
var coordinates: Coordinates? = nil
var locationCoordinate: CLLocationCoordinate2D? {
CLLocationCoordinate2D(
latitude: coordinates!.latitude,
longitude: coordinates!.longitude)
}
}
Спасибо. Работает. Искал это часами.
Делать все необязательным — не лучшее решение.
Да, это нехорошо, но он хочет использовать пустой конструктор, я дал ему обе возможности
Отвечает ли это на ваш вопрос? Отсутствует аргумент для параметра from в вызове - SwiftUI