快速请求和处理程序

时间:2016-02-23 19:39:33

标签: swift request

我需要从网址获取数据。为此,我在“HTTPClient”类中获得了方法。

func getRequest(url: String, parameters: String = "", completion: (NSData) -> ()) {
    var request = NSMutableURLRequest(URL: NSURL(string: url)!)
    if parameters != "" {
        request = NSMutableURLRequest(URL: NSURL(string: url + "?" + parameters)!)
    }
    request.HTTPMethod = "GET"
    request.HTTPShouldHandleCookies = true

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        (data, response, error) in

        if error != nil {
            print(error?.localizedDescription)
            return
        } else {
            completion(data!)
        }
    }

    task.resume()
}

但是当我从“MainService”类调用它时,我没有在处理程序中获取数据。 (我不是来处理者)

func getAvailableCoins() -> [Coin]? {
    var coins = [Coin]?()

    httpClient.getRequest("http://shapeshift.io/getcoins", completion: { data in
        coins = self.shapeShiftService.availableCoins(data)
    })

    return coins
}

可能有什么问题?

1 个答案:

答案 0 :(得分:0)

我刚刚意识到你在你的处理程序有机会被调用之前从你的getAvailableCoins()方法返回。因此,您返回一个空数组。

基本上,getAvailableCoins()是一个异步操作,你不能使用 return 语句来返回结果。您可以做的是声明一种特殊方法,并在取出硬币时调用它:

(?=([0-9]+\s+ok\s+[0-9]+\s+nok)) (?=(ltelidt|eiflmrj5))

现在 coinsAreReady 将在您的数据加载后被调用,您可以从那里使用它。