ในการโหลดรูปภาพใน iOS โดยใช้ swift เราจะใช้เซสชันงานข้อมูลอย่างง่าย ต้องโหลดรูปภาพในพื้นหลังเนื่องจากอาจมีขนาดใดก็ได้ และเราไม่ต้องการให้หยุดการทำงานของมุมมองหลักของเรา
ลองดูสิ่งนี้ด้วยความช่วยเหลือจากตัวอย่าง สร้างโครงการเปล่าและเพิ่มมุมมองภาพที่ว่างเปล่า
สร้างทางออก จากนั้นเราจะเขียนโค้ดเพื่อรับรูปภาพจาก URL นี่คือหน้าตาของแอปพลิเคชันของเราในขณะนี้
ตอนนี้ มาเพิ่มโค้ดเพื่อรับรูปภาพจาก 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) } } }
เมื่อเรารันโค้ดนี้ มันจะดาวน์โหลดรูปภาพจาก URL เราสามารถสร้างออบเจกต์รูปภาพและเริ่มต้น imgView ของเราด้วยออบเจกต์ใหม่
แต่มาสร้างส่วนขยายของวิธีนี้และใช้กันเถอะ
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!) }
เมื่อเราเรียกใช้รหัสนี้บนอุปกรณ์ของเรา เราจะได้รับผลลัพธ์ดังต่อไปนี้