我需要从网址获取数据。为此,我在“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
}
可能有什么问题?
答案 0 :(得分:0)
我刚刚意识到你在你的处理程序有机会被调用之前从你的getAvailableCoins()方法返回。因此,您返回一个空数组。
基本上,getAvailableCoins()是一个异步操作,你不能使用 return 语句来返回结果。您可以做的是声明一种特殊方法,并在取出硬币时调用它:
(?=([0-9]+\s+ok\s+[0-9]+\s+nok)) (?=(ltelidt|eiflmrj5))
现在 coinsAreReady 将在您的数据加载后被调用,您可以从那里使用它。