Hallo,
folgende Herausforderung stellt sich mir. Ich rufe eine Funktion auf. In dieser wird eine Session gestartet. Nun würde ich gerne das Ergebnis, welches innerhalb der Session erzeugt wurde zurück an die Funktion liefern. Diese sollte dann das Ergebnis via return() an die aufrufende Funktion liefern.
Wenn ich DispacthQueue.main.async() verwende, kann ich das Ergebnis zwar direkt an eine Variable, welche in der Klasse deklariert und definiert wurde, übergeben. Doch dies ist weder schön noch übersichtlich.
Nachfolgender Pyseudo-Code sollte mein Anliegen nochmals verdeutlichen.
Alles anzeigen
Diese Funktion liefert jedoch nicht das berechnete Ergebnis, sondern den in Zeile 4. definierten Wert der Variable dResaultData; also "Error".
Mir ist auch klar, dass die Berechnungen innerhalb von Session in einem anderen Thread stattfinden. Nur finde ich augenblicklich keine Lösung die Variable dResultData aus diesem Session-Thread dem Funktion-Thread zu übergeben, damit dieser dann die Variable via return (s. Zeile 28) zurückliefen kann.
Kann mir hier jemand den entscheiden Tipp liefern?
Danke mal vorab.
folgende Herausforderung stellt sich mir. Ich rufe eine Funktion auf. In dieser wird eine Session gestartet. Nun würde ich gerne das Ergebnis, welches innerhalb der Session erzeugt wurde zurück an die Funktion liefern. Diese sollte dann das Ergebnis via return() an die aufrufende Funktion liefern.
Wenn ich DispacthQueue.main.async() verwende, kann ich das Ergebnis zwar direkt an eine Variable, welche in der Klasse deklariert und definiert wurde, übergeben. Doch dies ist weder schön noch übersichtlich.
Nachfolgender Pyseudo-Code sollte mein Anliegen nochmals verdeutlichen.
Quellcode
- func runSessionURLGetData() -> Data
- {
- // ReturnValue
- var dResualtData: Data = "Error".data(using: .utf8)!
- // Define the URL you want to request
- let urlString = "https://www.example.com/......"
- // Create a URL object from the string
- if let strUrl = URL(string: urlString) {
- let urlSession = URLSession.shared
- let task = urlSession.dataTask(with: strUrl) { data, _, error in
- guard let dataFromSession = data else {
- debugPrint("Error loading \(String(describing: apiUrl)): \(String(describing: error))")
- return
- }
- // an dieser Stelle erfolgen weitere Berechnungen
- dResualtData = dataFromSession
- }
- task.resume()
- }
- else
- {
- print("URL is not valid!")
- }
- return (dResualtData)
- }
Diese Funktion liefert jedoch nicht das berechnete Ergebnis, sondern den in Zeile 4. definierten Wert der Variable dResaultData; also "Error".
Mir ist auch klar, dass die Berechnungen innerhalb von Session in einem anderen Thread stattfinden. Nur finde ich augenblicklich keine Lösung die Variable dResultData aus diesem Session-Thread dem Funktion-Thread zu übergeben, damit dieser dann die Variable via return (s. Zeile 28) zurückliefen kann.
Kann mir hier jemand den entscheiden Tipp liefern?
Danke mal vorab.