我现在的代码似乎没有返回任何东西,我无法找出导致问题的原因.
func getQuests(category: NSString, count: Int) -> NSArray {
var quests = NSArray()
Alamofire.request(.GET, apiUrlString, parameters: ["category": category, "count": count])
.responseJSON { (request, response, json, error) in
dispatch_async(dispatch_get_main_queue(), {
quests = json as NSArray
})
}
println(quests) #=> ()
return quests
}
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决我遇到的问题吗?
[更新]:这是状态.
请看第五行和第八行.我无法完成任务的任务.
var quests = NSArray()
getQuests("normal", count: 30, completionHandler: {
quests in
self.quests = quests
})
println(self.quests) #=> ()
func getQuests(category: NSString, count: Int, completionHandler: (NSArray -> Void)) {
var quests = NSArray()
Alamofire.request(.GET, apiUrlString, parameters: ["category": category, "count": count])
.responseJSON { (request, response, json, error) in
dispatch_async(dispatch_get_main_queue(), {
quests = json as NSArray
completionHandler(quests)
})
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
其他答案肯定是正确的,并且遇到了许多与异步操作相关的问题.我只是想补充一下dispatch_async(dispatch_get_main_queue())不需要电话的事实.
这已经在Alamofire内部自动完成.Alamofire处理内部委托调度队列上的所有操作.完成所有这些操作(验证,响应序列化等)后,默认情况下会在主调度队列上调用完成处理程序闭包.这使得dispatch_async不必要,它应该被删除.
如果您愿意,也可以在自己提供的调度队列上运行完成处理程序,但这肯定是一个不适用于此用例的高级功能.
这是相同逻辑的更简洁版本.
let apiUrlString = "some/url/path"
func getQuests(#category: NSString, count: Int, completionHandler: (NSArray) -> Void) {
Alamofire.request(.GET, apiUrlString, parameters: ["category": category, "count": count])
.responseJSON { _, _, json, _ in
completionHandler(json as NSArray)
}
}
var myQuests: NSArray?
getQuests(category: "normal", count: 30) { quests in
myQuests = quests
println("My Quests: \(myQuests)")
}
Run Code Online (Sandbox Code Playgroud)