相当于Swift performSelectorOnMainThread waitUntilDone

时间:2014-09-03 11:08:12

标签: ios http swift google-places-api background-process

我想在swift中翻译这个:

dispatch_async(kBgQueue, ^{

        NSData* data = [NSData dataWithContentsOfURL: googleRequestURL];

        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];

    });

使用google places api。

我想知道使用简单的NSURLSession请求,但似乎dataWithContentsOfURL执行NSURLSession请求的工作?

有人吗?

2 个答案:

答案 0 :(得分:1)

不鼓励{p> 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...
    }
}