Я пытаюсь отобразить изображения из списка объектов, хранящихся в Firebase
. Изначально изображение загружается нормально, но если я переключаюсь на другое представление и возвращаюсь к представлению списка, изображение никогда не загружается снова.
Gif описанной ошибки
Данные изображения, похоже, сохраняются, как и ожидалось, при обеих попытках загрузки: здесь
Ниже приведен мой код для загрузчика изображений, который используетURL-адрес для извлечения изображений из Firebase Storage и строка списка, содержащая изображение.
ImageLoader.swift
import Foundation
import SwiftUI
import Firebase
import FirebaseFirestore
class ImageLoader: ObservableObject {
@Published var dataIsValid = false
var data:Data?
func loadImage(url: String) {
let imageRef = Storage.storage().reference(forURL: url)
imageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
if let error = error {
print("\(error)")
}
guard let data = data else { return }
DispatchQueue.main.async {
print(self.dataIsValid)
self.dataIsValid = true
self.data = data
}
}
}
func imageFromData() -> UIImage {
UIImage(data: self.data!)!
}
}
ListRow. swift
import SwiftUI
import Combine
struct EventRow: View {
@ObservedObject var imageLoader = ImageLoader()
var imageUrl: String
var body: some View {
HStack {
Image(uiImage: self.imageLoader.dataIsValid ? self.imageLoader.imageFromData() : UIImage())
.resizable()
.frame(width: 100.0, height: 140.0)
.background(Color.gray)
.clipShape(RoundedRectangle(cornerRadius: 5.0))
}
.onAppear {
self.imageLoader.loadImage(url: self.imageUrl)
}
}
}