Примеры Multithreading iOS Swift
Два примера использования Multithreading и GCD на языке Swift
Этот пример позволяет получить что-то по ссылке в интернет. Очевидно, что не стоит это делать в основном потоке.
let session = NSURLSession(NSURLSessionConfiguration.defaultSessionConfiguration()) if let url = NSURL(string: “http://url”) { let request = NSURLRequest(URL: url) let task = session.downloadTaskWithRequest(request) { (localURL, response, error) in // вот тут мы обрабатываем получаемые данные, но затем, чтобы обновить UI нужно вернуться в основной поток, что мы и делаем ниже  dispatch_async(dispatch_get_main_queue()) { // и вот тут уже меняем интерфейс в соответствии с тем, что загрузили из интернета } } task.resume() }
А это пример готового решения загрузки картинки из интернета и установки ее в UI
private func fetchImage() { if let url = imageURL { spinner?.startAnimating() let qos = Int(QOS_CLASS_USER_INITIATED.rawValue) dispatch_async(dispatch_get_global_queue(qos, 0)) { () -> Void in let imageData = NSData(contentsOfURL: url) dispatch_async(dispatch_get_main_queue()) { if url == self.imageURL { // эта строка проверяет что вывести нужно именно то что хочет пользователь. т.к. интерфейс не блокируется, то пользователь может успеть запросить все подряд. if imageData != nil { self.image = UIImage(data: imageData!) spinner?.stopAnimating() } else { self.image = nil self.loadStanford() } } } } } }
Добавить комментарий