我想在swift中翻译这个:
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL: googleRequestURL];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
});
使用google places api。
我想知道使用简单的NSURLSession请求,但似乎dataWithContentsOfURL执行NSURLSession请求的工作?
有人吗?
答案 0 :(得分:1)
dataWithContentsOfURL
。您应该使用NSURLSession
进行异步下载,或者如果您更喜欢更简单的NSURLConnection
。
委托回调告诉主线程何时完成下载 - 因此无需使用Great Central Dispatch API。
答案 1 :(得分:0)
Mundi是对的,这里更好的工具是NSURLSession
。但是你的代码可以工作;只需要正确使用GCD,并处理它可能失败的事实:
dispatch_async(kBgQueue) {
if let data = NSData.dataWithContentsOfURL(googleRequestURL) {
dispatch_sync(dispatch_get_main_queue()) { self.fetchedData(data) }
} else {
// Here's the problem with dataWithContentsOfURL. You had an error, but you
// don't know what it was. I guess you'll do something here...
}
}