Computer >> Máy Tính >  >> Lập trình >> IOS

Làm cách nào để tải hình ảnh bằng URL trên thiết bị iOS bằng Swift?

Để tải nhanh hình ảnh trong iOS, chúng tôi sẽ sử dụng phiên Tác vụ dữ liệu đơn giản. Hình ảnh cần được tải ở chế độ nền vì nó có thể ở bất kỳ kích thước nào và chúng tôi không muốn nó dừng hoạt động của chế độ xem chính của chúng tôi.

Hãy xem điều này với sự trợ giúp của một ví dụ. Tạo một dự án trống và thêm chế độ xem Hình ảnh trống.

Tạo cửa hàng của nó và sau đó chúng tôi sẽ viết mã để lấy hình ảnh từ một URL. Đây là cách ứng dụng của chúng tôi hiện tại.

Làm cách nào để tải hình ảnh bằng URL trên thiết bị iOS bằng Swift?

Bây giờ, hãy thêm mã để lấy hình ảnh từ một 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)
     }
   }
}

Khi chúng tôi chạy mã này, nó sẽ tải xuống hình ảnh từ URL, chúng tôi có thể tạo một đối tượng hình ảnh và khởi tạo imgView của chúng tôi với đối tượng mới.

Nhưng hãy tạo một phần mở rộng của phương pháp này và sử dụng.

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)
         }
      }
   }
}

Bây giờ, trong viewDidLoad của chúng tôi (hoặc bất kỳ nơi nào khác mà bạn thích), hãy thêm mã sau.

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!)
}

Khi chúng tôi chạy mã này trên thiết bị của mình, chúng tôi nhận được kết quả sau.

Làm cách nào để tải hình ảnh bằng URL trên thiết bị iOS bằng Swift?