如何从Swift中的回调语句中获取值

时间:2017-07-20 16:54:18

标签: swift callback alamofire

我在我的程序中使用alamofire来打电话给我并获取数据。它存储在可以从其他类调用的函数中。该函数如下所示:

static func searchSong() {
    Alamofire.request(*urlhere*, callback: { response in
        parseData(request)
    }
}

然后方法parseData会通过返回给我的内容。现在我想要发生的是searchSong()实际上能够在我在parseData中解析它时返回数据。如何在parseData结束时获取我所拥有的内容并将其返回到searchSong()。

我有打印语句告诉我已经得到了响应并且parseData工作正常,但我不知道如何将我在parseData末尾的内容返回到searchSong,以便searchSong可以返回所需的信息从它被称为。

2 个答案:

答案 0 :(得分:0)

让你的searchSong()函数接受一个回调(要求回调采用parseData类型的params),然后当alamofire请求完成时,调用回调并将调用传回parseData。我相信你已经知道但是alamofire请求是异步的。处理这类问题的最标准方法是调用回调。

答案 1 :(得分:0)

Alamofires'调用是异步调用的,这意味着您的searchSong函数返回值将始终为Void。 如果你想"返回"响应值,将一个回调作为参数添加到searchSong

func searchSong(returnCallback: (Any) -> Void){
    Alamofire.request(*urlhere*, callback: { response in
       // Any is the type of your returning element.
       returnCallback(/* resposne or wathever you want to return */)
    }
}

然后无论你在哪里调用searchSong,你都会有这样的结构:

self.searchSong { (response) in
    /* code here */
    // here on response you have the request returning value
}

请注意,所有这些过程都是异步的,这是Apple处理HTTP请求的方式,所以Alamofire遵循这一点。