Hallo zusammen,
ich bin auf mein nächstes Problem gestoßen und komme nicht so recht weiter weil mir der Einstieg fehlt, oder besser gesagt das Hintergrundwissen
Problem/Frage
Ich habe eine App die sich Daten aus dem Internet holt (JSON), diese parsed und dann ein bisschen rechnet und das Ergebnis in Labels anzeigt.
Das habe ich mit Eurer Hilfe auch schon so weit hinbekommen. Nun benötige ich einen "Reload/Refresh" Button der beim betätigen die Daten erneut holt, die Berechnungen, etc, anstellt und dann die Labels aktualisiert.
Beim "stöbern" im Internet habe ich dazu zwar einiges gefunden, bin daraus aber nicht so recht schlau geworden. Was ich meine verstanden zu haben ist die Tatsache das es ein No-Go ist viewDidLoad manuell einfach aufzurufen !? Vielleicht habe ich das aber auch im Zusammenhang falsch interpretiert.
Hier mal mein Code, der anscheinend funktioniert (self.viewDidLoad), sprich beim drücken des Button wird das Date Label aktualisiert. Ich bin aber sehr verunsichert ob das nur rein zufällig funktioniert und generell eine schlechte Lösung ist.
Wäre über Eure Einschätzung und Tipps wie immer sehr dankbar
Alles anzeigen
Gruß
Ralf
ich bin auf mein nächstes Problem gestoßen und komme nicht so recht weiter weil mir der Einstieg fehlt, oder besser gesagt das Hintergrundwissen
Problem/Frage
Ich habe eine App die sich Daten aus dem Internet holt (JSON), diese parsed und dann ein bisschen rechnet und das Ergebnis in Labels anzeigt.
Das habe ich mit Eurer Hilfe auch schon so weit hinbekommen. Nun benötige ich einen "Reload/Refresh" Button der beim betätigen die Daten erneut holt, die Berechnungen, etc, anstellt und dann die Labels aktualisiert.
Beim "stöbern" im Internet habe ich dazu zwar einiges gefunden, bin daraus aber nicht so recht schlau geworden. Was ich meine verstanden zu haben ist die Tatsache das es ein No-Go ist viewDidLoad manuell einfach aufzurufen !? Vielleicht habe ich das aber auch im Zusammenhang falsch interpretiert.
Hier mal mein Code, der anscheinend funktioniert (self.viewDidLoad), sprich beim drücken des Button wird das Date Label aktualisiert. Ich bin aber sehr verunsichert ob das nur rein zufällig funktioniert und generell eine schlechte Lösung ist.
Wäre über Eure Einschätzung und Tipps wie immer sehr dankbar
Quellcode
- import UIKit
- import Foundation
- struct Currency: Decodable {
- var EUR_USD: Double
- var USD_EUR: Double
- }
- class ViewController: UIViewController {
- @IBOutlet weak var labelDate: UILabel!
- @IBOutlet weak var labelCurrency: UILabel!
- @IBAction func reloadView(_ sender: Any) {
- print("Reload View")
- self.viewDidLoad()
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- let urlString = "https://free.currconv.com/api/v7/convert?q=USD_EUR,EUR_USD&compact=ultra&apiKey=123456789"
- let url = URL(string: urlString)
- let session = URLSession.shared
- let dataTask = session.dataTask(with: url!) { [self] (data, reponse, error) in
- // check for errors
- if error == nil && data != nil {
- // parse json
- do {
- // Aktuelles Abfrage Datum ermitteln und formatieren
- // Referenz: https://www.ralfebert.de/ios/swift-dateformatter-datumsangaben-formatieren/
- let formatter = DateFormatter()
- formatter.locale = .init(identifier: "de")
- formatter.dateStyle = .medium
- formatter.timeStyle = .medium
- let dateFormattedString = formatter.string(from: Date())
- let currency: Currency = try! JSONDecoder().decode(Currency.self, from: data!)
- // Werte der Label im MainTask setzen
- DispatchQueue.main.async {
- labelDate.text = dateFormattedString
- labelCurrency.text = String(currency.EUR_USD)
- }
- }
- }
- }
- // Make the API call
- dataTask.resume()
- }
- }
Ralf