iOS
Swift

[iOS] 画像を非同期で読み込む

画像の読み込み

URLから画像を読み込み、完了した時点で画面に反映させたい場合があるとします。この場合、画像のロードは非同期で行い、完了した時点でメインスレッドにてUIの操作を行う方法が考えられます。

URLSessionを用いて画像を読み込み、完了時にClosure内の処理を実行する
class ImageLoader {
    func loadImage(url: URL, completion: @escaping (_ succeeded: Bool, _ image: UIImage?) -> Void) {
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            if let data = data {
                completion(true, UIImage(data: data))
            }
        }.resume()
    }
}

使用例

ImageLoader().loadImage(url: imageUrl) { (succeeded, image) in
    if (succeeded) {
        DispatchQueue.main.async {
            self.imageView.image = image
        }
    }
}

注意点

UIの操作(ImageViewの更新)をバックグラウンドで行うと遅延やクラッシュの原因となるため、メインスレッドで行うようにしてください。