Wenn eine Variable in einem geschachtelten Funktionsbereich geändert wird, bleibt sie nicht geändert, sobald der Bereich verlassen wird. In meinem Beispielcode, wenn ich die Variable xmlString gleich der Antwort gesetzt habe, wird sie korrekt auf Antwort gesetzt. Aber dann gibt eine leere Zeichenfolge zurück.
func getXmlString(url: String) -> String { var xmlString: String = "" Alamofire.request(.GET, url) .validate() .responseString { response in xmlString = response.result.value! } return xmlString }
Ich weiß, dass es nur eine kleine Sache gibt, die ich vermisse und jede Hilfe, die meine Situation besser verstehen würde, würde mir helfen. DankeWie ändere ich eine Variable von einer verschachtelten Funktion?
4
A
Antwort
1
Alamofire
ist acsynchonus. Deshalb ist dein xmlString leer. Sie sollten warten, bis Sie eine Antwort von Alamofire
erhalten haben.
func getXmlString(url: String, completion: (xmlString: String) ->()) {
var xmlString: String = ""
Alamofire.request(.GET, url)
.validate()
.responseString { response in
xmlString = response.result.value!
completion(xmlString)
}
}
und es verwenden,
getXmlString(url: String){ xmlString in
//do something with your String
}
Gibt es eine Möglichkeit den String-Wert zurück normalerweise, wie ich gedacht ?. – Hairy
'func getXmlString (url: String, Vervollständigung: (xmlString: String) -> (String))' –
verwenden: 'getXmlString (url) {(xmlString) -> String im Gegenzug xmlString}' –