我无法在Swift中使用Alamofire返回值
发布时间:2020-12-14 04:45:29 所属栏目:百科 来源:网络整理
导读:我现在的代码似乎没有返回任何东西,我无法找出导致问题的原因. func getQuests(category: NSString,count: Int) - NSArray { var quests = NSArray() Alamofire.request(.GET,apiUrlString,parameters: ["category": category,"count": count]) .responseJSO
我现在的代码似乎没有返回任何东西,我无法找出导致问题的原因.
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 } 有人知道如何解决我遇到的问题吗? [更新]:这是状态. 请看第五行和第八行. 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,{ quests = json as NSArray completionHandler(quests) }) } } 谢谢. 解决方法
其他答案肯定是正确的,并且遇到了许多与异步操作相关的问题.我只想补充一个事实,即dispatch_async(dispatch_get_main_queue())调用不是必需的.
这已经在Alamofire内部自动完成. Alamofire处理内部委托调度队列上的所有操作.完成所有这些操作(验证,响应序列化等)后,默认情况下会在主调度队列上调用完成处理程序闭包.这使得dispatch_async不再需要,应该删除它.
这是相同逻辑的更简洁版本. let apiUrlString = "some/url/path" func getQuests(#category: NSString,completionHandler: (NSArray) -> Void) { Alamofire.request(.GET,"count": count]) .responseJSON { _,_,_ in completionHandler(json as NSArray) } } var myQuests: NSArray? getQuests(category: "normal",count: 30) { quests in myQuests = quests println("My Quests: (myQuests)") } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |