Возможно, это может быть непонимание, которое у меня есть в Swift. Я новичок в языке, и мой опыт в Perl, что заставляет меня чувствовать, что быстро действует по-разному.Данные не возвращаются функцией Swift iOS
У меня есть 2 файла. ViewController.swift и APICalls.swift. В viewcontroller у меня есть функция для кнопки. В этой функции я делаю вызов другой функции в APICalls. Когда я это делаю, мой println() в APICalls печатает правильные данные, однако это происходит после моего println() в функции кнопки.
Viewcontroller.swift
@IBAction func buttonStuff(sender: AnyObject) {
var api = APICalls()
var token:String
token = api.TEST("letmein")
println("\ntokenDidLOAD = \(token)\n")
}
APICalls.swift
class APICalls {
func TEST(command: String) -> (String) {
var token:String = ""
// Form URL-Encoded Body
let bodyParameters = [
"COMMAND":command,
]
let encoding = Alamofire.ParameterEncoding.URL
// Fetch Request
Alamofire.request(.POST, "http://api.com/?v=1", parameters: bodyParameters, encoding: encoding)
.validate(statusCode: 200..<300)
.responseJSON{(request, response, data, error) in
if (error == nil)
{
let json = JSON(data!)
token = json["TOKEN"].string!
println("jsonAPI = \(json) \n\n")
}
else
{
println("HTTP HTTP Request failed: \(error)")
}
}
return token
}
}
Вот мой выход
tokenDidLOAD =
jsonAPI = {
"STATUS" : "OK",
"TOKEN" : "698798765432134654",
}
Я не понимаю, почему 'tokenDidLOAD' печатает первый перед jsonAPI ,
[Разница между синхронным и асинхронным] (http: // stackoverflow.com/q/21122842/468724) –
Вы должны прочитать раздел «Обработка ответов» в Readme Alamofire. В нем явно упоминается асинхронная процедура. –
Похожие вопросы с ответами: http://stackoverflow.com/questions/29377824/swift-alamofire-return-value-is-empty, http://stackoverflow.com/questions/29377824/swift-alamofire-return-value- is-empty, http://stackoverflow.com/questions/25141829/swift-closure-with-alamofire (и еще несколько ...) –