Variable leer?
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
-
-
Der Session-Task läuft asynchron. Wenn der print-befehl ausgeführt wird, ist die Anfrage in der Regel noch nicht beendet.„Meine Komplikation hatte eine Komplikation.“
-
D.h. ich müsste warten bis.. Wie mach ich das am besten ?
-
-
Könntest du mir das bitte noch ein bisschen ausführlicher geben? Finde darüber kaum was. Muss also gewartet werden bis der Task fertig ist?
-
in den completion block kommt der Code rein, der ausgeführt werden soll, wenn eine function abgeschlossen ist, die ein wenig mehr zeit braucht..
2 Beispiele:
1. Animationen haben eine feste Dauer, z.B 0.3 Sekunden. wenn du willst, dass etwas nach der Animation passiert (z.B ein view entfernt) kommt das in den block rein, da der normale Code sofort weiterlaufen würde
2. requests an einen Server z.B dauern auch immer ein wenig länger, deshalb muss man mit dem result in einem completion block weiterarbeiten, sonst will man ja quasi mit etwas arbeiten, was du noch nicht hast, da die request ja abgeschlossen sein muss damit du ne Antwort hast..
also im Prinzip stimmt das, du wartest bis der Task fertig ist. -
vico255 schrieb:
D.h. ich müsste warten bis.. Wie mach ich das am besten ?
„Meine Komplikation hatte eine Komplikation.“ -
macmoonshine schrieb:
vico255 schrieb:
D.h. ich müsste warten bis.. Wie mach ich das am besten ?
Hier bekommst du noch ein paar Infos
developer.apple.com/library/co…ng_Language/Closures.html -
matz schrieb:
Hier bekommst du noch ein paar Infos
„Meine Komplikation hatte eine Komplikation.“ -
macmoonshine schrieb:
matz schrieb:
Hier bekommst du noch ein paar Infos
Na dann wünsche ich viel Spaß hier developer.apple.com/library/co…ple_ref/doc/uid/10000165i
Oder als blödes Kurzbeispiel:
Du stehst im McDonalds an der Kasse und bestellst etwas. Zuerst wird dir das Tablett hingestellt (ohne deine Ware), du nimmst das Tablett und verschwindest ohne das deine Ware darauf gestellt wurde.
Ähnliches verhalten hast du oben, in deinem completionBlock (closure) musst du abwarten bis dein Essen kam, dann kannst du verschwinden und es nutzen -
Bekomm es einfach nicht hin.
Quellcode
- func f() -> String {
- var request = URLRequest(url: URL(string: "https://www.xxx.de/benutzerlogin")!)
- request.httpMethod = "GET"
- var loginString = ""
- // request.httpBody = postString.data(using: .utf8)
- let task = URLSession.shared.dataTask(with: request) { data, response, error in
- guard let data = data, error == nil else { // fundamental networking error
- print("error=\(error)")
- return
- }
- if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode < 999 { // http errors
- //print(httpStatus.statusCode)
- let cookies = HTTPCookie.cookies(withResponseHeaderFields: httpStatus.allHeaderFields as! [String : String], for: httpStatus.url!)
- HTTPCookieStorage.shared.setCookies(cookies, for: httpStatus.url!, mainDocumentURL: response?.url)
- //print(HTTPCookieStorage.shared.cookies)
- //print(cookies)
- //print(httpStatus.allHeaderFields)
- }
- let responseString:String = String(data: data, encoding: .utf8)!
- var returnValue: String"
- returnValue = "xxx"
- }
- loginString = "username=xxx&password=12345678&return=aW5kZXgucGhwP2xxxxxxxxxxnMmdmlldz1wcm9maWxl&\(returnValue!)=1" // loginstring aus dem ersten Get request
- }
- task.resume()
- return loginString
- print(loginstring) // ist leer
-
Lies dir mal
- die Beiträge nochmal durch und
- was asynchron bedeutet.
„Meine Komplikation hatte eine Komplikation.“ - die Beiträge nochmal durch und
-
Hab ich jetzt x mal aber trotzdem komm ich nicht weiter. Es klingelt einfach nicht und ich sitz da jetzt Stunden vor. Und das Prinzip hab ich verstanden. Wo ich allerdings abfrage ob er fertig ist, ist mir schleierhaft und wie... Danke
-
-
Was in dem Block steht, mit dem der Task initialisiert wird, läuft erst nachdem die Kommunikation zu Ende ist - dein print wartet aber auf gar nichts.
Wenn du den Kram etwas weiter nach oben (in die geschweiften Klammern) schiebst, stimmt die Reihenfolge.
-
Ähnliche Themen