加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读