การโหลดรูปภาพจาก URL ใน iOS ใช้ URLSession data task ควรโหลดใน Background thread เพื่อไม่บล็อก Main thread
ตัวอย่าง
- สร้างโปรเจกต์ว่าง เพิ่ม Image View และสร้าง Outlet
- เขียนโค้ดดึงรูปจาก URL
สถานะเริ่มต้น:

โค้ดโหลดรูปภาพ
func getData(from url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
URLSession.shared.dataTask(with: url, completionHandler: completion).resume()
}
func downloadImage(from url: URL) {
getData(from: url) { data, response, error in
guard let data = data, error == nil else { return }
DispatchQueue.main.async() {
self.image = UIImage(data: data)
}
}
}ปรับปรุงด้วย Extension
สร้าง Extension ของ UIImageView เพื่อใช้งานสะดวก:
extension UIImageView {
func getData(from url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
URLSession.shared.dataTask(with: url, completionHandler: completion).resume()
}
func downloadImage(from url: URL) {
getData(from: url) { data, response, error in
guard let data = data, error == nil else { return }
DispatchQueue.main.async() {
self.image = UIImage(data: data)
}
}
}
}การใช้งาน
ใน viewDidLoad (หรือที่ต้องการ):
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://static.independent.co.uk/s3fs-public/thumbnails/image/2017/09/12/11/naturo-monkey-selfie.jpg?w968h681")
self.imgView.downloadImage(from: url!)
}ผลลัพธ์:
