在Swift 3上运行一个后台线程
我有一个这样的function:
fileprivate func setupImageViewWithURL(url: URL) { var image: UIImage? = nil do { try image = UIImage(data: Data(contentsOf: url))! } catch is NSError { print("Failed") } image = self.imageWithImage(sourceImage: image!, scaledToWidth: UIScreen.main.bounds.size.width) self.imageImageView.image = image self.imageImageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: (image?.size.height)!) }
我想在Background
thread
上运行它。
我已经尝试了Swift2
的GDC
方法,但没有奏效。
Swift3
的线程主题有什么改变?
谢谢!
在后台加载图像是可以的,但是在后台线程上执行UI更新是不行的。 这就是为什么函数必须包含两个线程。
func setupImageViewWithURL(url: URL) { var image: UIImage? = nil DispatchQueue.global().async { do { try image = UIImage(data: Data(contentsOf: url))! } catch { print("Failed") } DispatchQueue.main.async(execute: { if image != nil { image = self.imageWithImage(sourceImage: image!, scaledToWidth: UIScreen.main.bounds.size.width) self.imageImageView.image = image self.imageImageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: (image?.size.height)!) } }) } }