AsyncImage не отображает все изображения в списке и создает код ошибки =-999 «отменено»
У меня возникли проблемы с отображением всех изображений в списке с помощью AsyncImage. Когда вы впервые запускаете приложение, оно выглядит нормально, но если вы начинаете прокручивать, некоторые изображения не отображаются. Либо ProgressView не обновляется до тех пор, пока строка не будет прокручена за пределы экрана и не вернется в поле зрения, либо я получаю код ошибки =-999 «отменено».
Я могу заставить все изображения отображаться, а ProgressView правильно обновлять, используя обычное представление изображений и выполняя весь процесс установки загрузки и отображения изображения. Только когда я пытаюсь использовать AsyncImage, все изображения не отображаются. Как я могу заставить все AsyncImages отображаться в списке?
struct ContentView: View {
@StateObject private var viewModel = ListViewModel()
var body: some View {
List {
ForEach(viewModel.images) { photo in
HStack {
AsyncImage(url: URL(string: photo.thumbnailUrl)) { phase in
switch phase {
case .success(let image):
image
case .failure(let error):
let _ = print(error)
Text("error: \(error.localizedDescription)")
case .empty:
ProgressView()
@unknown default:
fatalError()
}
}
VStack(alignment: .leading) {
Text(photo.title)
Text(photo.thumbnailUrl)
}
}
}
}
.task {
await viewModel.loadImages()
}
}
}
@MainActor
class ListViewModel: ObservableObject {
@Published var images: [PhotoObject] = []
func loadImages() async {
do {
let photos = try await AsyncImageManager.downloadImages()
images = photos
} catch {
print("Could load photos: \(error)")
}
}
}
struct AsyncImageManager {
static func downloadImages() async throws -> [PhotoObject] {
let url = URL(string: "https://jsonplaceholder.typicode.com/photos")!
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode([PhotoObject].self, from: data)
}
}
struct PhotoObject: Identifiable, Codable {
let albumId: Int
let id: Int
let title: String
let url: String
let thumbnailUrl: String
}