【Swift】UIImageViewにURLの画像を表示する(2) - Swift・iOSの続きです。今回は画像の取得に加えてキャッシュに関する機能を実装してみます。
■開発環境
・Xcode 10.1
・Swift 4.2.1
■手順
1.StoryboardでUIImageViewを配置
2.StoryboardのImageViewをViewControllerに関連づける&ViewControllerに以下実装
・ViewController.swift
import UIKit class ViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() self.showImage(imageView: imageView, imageUrl: "https://o.aolcdn.com/images/dims?resize=2000%2C2000%2Cshrink&image_uri=https%3A%2F%2Fs.yimg.com%2Fos%2Fcreatr-uploaded-images%2F2019-03%2F17a673a0-4d14-11e9-a77f-c09a6c680f31&client=a1acac3e1b3290917d92&signature=ab5e9583dc50d6e43a5f54ba50b22eec11c35102") } private func showImage(imageView: UIImageView, imageUrl: String) { let url = URL(string: imageUrl)! var request = URLRequest(url: url) // ローカルキャッシュが使用可能か試し、使用不可能であればネットワークから取得 request.cachePolicy = .returnCacheDataElseLoad // ディスクに保存されるキャッシュ、認証情報、クッキーを使用 let configuration = URLSessionConfiguration.default let session = URLSession(configuration: configuration) session.dataTask(with: request) { data, responds, error in // リクエストに失敗 if let error = error { print(error.localizedDescription) return } guard let data = data, let response = responds as? HTTPURLResponse else { return } // リクエスト成功 if response.statusCode == 200 { DispatchQueue.main.async { imageView.image = UIImage(data: data) } } else { // サーバー側でリクエストされたものが正常に返せていない print(response.statusCode) } }.resume() } }
■関連リンク
・ URLSession - Foundation | Apple Developer Documentation
・URLRequest - Foundation | Apple Developer Documentation
・Accessing Cached Data | Apple Developer Documentation
・SwiftでUIImageViewにURLから非同期で画像を取得してセットする(キャッシュ付き,URLSession) - Qiita