У меня есть приложение, в котором я пытаюсь загрузить изображение из базы данных Firebase, используя URL-адрес.Это работает, просто очень, очень медленно.Есть ли для этого какая-либо причина?
Я пытался настроить кэширование, но не уверен, что делаю это правильно.Я довольно новичок в swift и xcode.
//Gets the image from the database 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 }
print(response?.suggestedFilename ?? url.lastPathComponent)
DispatchQueue.main.async() {
let imageToCache = UIImage(data: data)
self.imageCache.setObject(imageToCache!, forKey: url as AnyObject)
self.profileImageView.image = imageToCache
//self.profileImageView.image = UIImage(data: data)
}
}
}
Здесь я вызываю функцию downloadImage в функции viewDidLoad ():
let profileImageRef = Storage.storage().reference().child("users").child(uid!).child("\(uid!)-profileImage.jpg")
//let databaseRef = Database.database().reference().child("userProfile").child(uid!)
profileImageRef.downloadURL { url, error in
if let error = error {
//handle errors
print(error)
} else {
//get download URL
if let downloadUrl = url {
let downloadString = downloadUrl.absoluteString
//add downloadString to the database in profileImageURL
let url = URL(string: downloadString)!
if let imageFromCache = self.imageCache.object(forKey: url as AnyObject) as? UIImage {
self.profileImageView.image = imageFromCache
return
} else {
self.downloadImage(from: url)
}
}
}
}