Ich lerne derzeit iOS-Entwicklung mit Swift. Ich mache eine einfache Wetter-App. Ich habe mehrere Knöpfe um das Wetter für die nächsten 4 Stunden zu bekommen. Ich bekomme das Wetter von der Dark Sky API, die im JSON-Format zurückgegeben wurde. Ich habe schließlich herausgefunden, wie man die korrekten Daten vom JSON abruft, und habe eine Klasse geschaffen, die die Daten holt.Wie kann ich Daten abrufen, die in einer separaten Klasse gespeichert sind, wenn ich von ViewController aus anrufe?
typealias WeatherCallback = (Weather) -> Void
typealias ErrorCallback = (Error) -> Void
class NetworkManager {
class func getWeather(latitude: String, longitude: String, onSuccess: WeatherCallback? = nil, onError: ErrorCallback? = nil) {
let urlString = "https://api.darksky.net/forecast/(api key)/" + latitude + "," + longitude + "?units=si"
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print(error!)
onError?(error!)
} else {
do {
let json = JSON(data: data!)
let weather = Weather()
DispatchQueue.main.async {
weather.updateWithJSON(dict: json["currently"], hour: 0)
for i in 1...4 {
weather.updateWithJSON(dict: json["hourly"]["data"][i], hour: i)
}
}
onSuccess?(weather)
}
}
}.resume()
}
}
Und ich habe eine andere Klasse, um die abgerufenen Daten zu speichern.
class Weather {
public var currentTime: String = ""
public var currentTemperature: String = ""
public var nextHourTime: String = ""
public var nextHourTemperature: String = ""
public var nextTwoHourTime: String = ""
public var nextTwoHourTemperature: String = ""
public var nextThreeHourTime: String = ""
public var nextThreeHourTemperature: String = ""
public var nextFourHourTime: String = ""
public var nextFourHourTemperature: String = ""
func updateCurrentData(time: String, temp: String) {
currentTime = time
currentTemperature = temp
}
func updateWithJSON(dict: JSON, hour: Int){
switch hour {
case 0:
currentTime = dict["time"].stringValue
currentTemperature = dict["temperature"].stringValue
case 1:
nextHourTime = dict["time"].stringValue
nextHourTemperature = dict["temperature"].stringValue
case 2:
nextTwoHourTime = dict["time"].stringValue
nextTwoHourTemperature = dict["temperature"].stringValue
case 3:
nextThreeHourTime = dict["time"].stringValue
nextThreeHourTemperature = dict["temperature"].stringValue
case 4:
nextFourHourTime = dict["time"].stringValue
nextFourHourTemperature = dict["temperature"].stringValue
default:
print("rip")
}
}
}
Mein Problem ist, ich kann nicht die gespeicherten Werte in der Klasse zugreifen Weather
aus ViewController
.
Zum Beispiel
let weather = Weather() print(weather.currentTime)
Jede Hilfe mich in der richtigen Richtung genial wäre in zeigen! Vielen Dank!
Zuerst sollten Sie mit 'Weather' mit' updateWithJSON' oder 'updateCurrentData' Methode initialisieren, dann können Sie nur durch die Instanz der Wetterklasse gespeicherte Werte erhalten. – Poles