当接近程序开始的代码的一部分首先与程序开始接近的代码部分执行时,我得到了力量问题
var count = 0
var save = NSUserDefaults.standardUserDefaults()
Alamofire.request(.GET, "")
.responseString(encoding: NSUTF8StringEncoding) { (request, response, string, error) -> Void in
println("res: "+string!)
count = string!.toInt()!
}
println(count)
下面。 First Alamofire发出请求并将响应数据设置为变量" count"。第二个我打印计数值来检查它。
在调试器中我看到
首先,我看到"计数"打印价值,然后我看到Alamofire的回应?我该如何解决?我需要计数是从字符串转换为整数
的alamofire-response答案 0 :(得分:3)
使用此API发出的请求是异步的。这意味着您的代码将继续执行并在执行响应闭包中的代码之前调用println(count)
。 URL请求需要时间,并且需要异步代码来防止阻塞主线程。
您需要重新构建代码以解决您正在使用异步方法调用的问题。例如,您的上述方法可能需要从响应的闭包中调用自己的completion
个闭包,然后将count
传递回那里。
func executeRequest(completion: (count: Int) -> ()) {
Alamofire.request(.GET, "http://my1test.ru/applejesus.php?task=getCategoryCount").responseString(encoding: NSUTF8StringEncoding) { (request, response, string, error) -> Void in
println("res: "+string!)
let count = string!.toInt()!
completion(count)
}
}
答案 1 :(得分:1)
Alamofire
有效asynchronously
,这意味着它将在后台执行任务并继续执行其余代码。因此,在这种情况下,代码同时执行。执行任务asynchronously
有助于提高性能,特别是在大型程序中,只需一个接一个地执行代码需要很长时间。
一个简单的解决方法是将print语句放在Alamofire
块