微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我无法在Swift中使用Alamofire返回值

我现在的代码似乎没有返回任何东西,我无法找出导致问题的原因.

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不再需要,应该删除它.

You can also run your completion handlers on your own provided dispatch queue if you like,but that’s certainly an advanced feature that is not applicable to this use case.

这是相同逻辑的更简洁版本.

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)")
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐