将 swifui Asyncimage 中加载的图像存储到数组

问题描述 投票:0回答:1

我有一个 swiftui 应用程序,正在从服务器加载图像并显示它和 uaisng AsyncImage。我想将图像存储在数组中。如何在asynview中存储图像 在数组中

@State private var images: [Image?] = []
var outputImageArray: [String] = ["https://replicate.delivery/pbxt/KJmFdQRQVDXGDVdVXftLvFrrvgOPXXRXbzIVEyExPYYOFPyF/80048a6e6586759dbcb529e74a9042ca.jpeg",
        "https://replicate.delivery/pbxt/KIIutO7jIleskKaWebhvurgBUlHR6M6KN7KHaMMWSt4OnVrF/musk_resize.jpeg",
        "https://replicate.delivery/pbxt/KI4a4NSCc0sAFMdlbD4n8ufHLXb2utKIwwbQff0M2ryhGJPJ/pp_0.jpg"
    ]


HStack  {
                                        

ForEach(Array(outputImageArray.enumerated()), id: \.element) { index, imageUrl in

                                       //     ForEach(outputImageArray ?? [], id: \.self) { imageUrl in
                                            AsyncImage(url: URL(string: imageUrl)) { sourceImage in
                                                                                                    self.images[index] = sourceImage



                                                sourceImage
                                                    .resizable()
                                                    .frame(width: 70, height: 100)   // <--- here
                                                    .aspectRatio(contentMode: .fill)  // <--- here
                                                    .clipped()
                                                    .clipShape(RoundedRectangle(cornerRadius: 10))
                                                    .overlay(RoundedRectangle(cornerRadius: 10).stroke(Color.gray, lineWidth: 1))
                                                   // .blur(radius: takenImageName != selectedImage ? 1 : 0)
                                                    .opacity(selectedImage != imageUrl ? 0.6 : 1.0) // Opacity for unselected images



                                            } placeholder: {
                                                ProgressView()
                                                    
                                            }.onTapGesture {
                                               // self.mainImageUrl = imageUrl
                                                self.selectedImage = imageUrl
                                                self.isDefaultSelected = false
                                              //  self.takenImageName = imageUrl
                                                print("taken image name tap",takenImageName)
                                                print("selectedImage",selectedImage)


                                            }
                                        }
                                    }

出现错误:类型“()”无法符合 lineself.images[index] = sourceImage 处的“View”

arrays swift swiftui swiftui-asyncimage
1个回答
0
投票

你得到的错误是因为你不能拥有这个 (正常程序)闭包内的代码

self.images[index] = sourceImage

而是使用

AsyncImage
的其他版本与
phase
, 比如这个示例代码:

 AsyncImage(url: url: URL(string: imageUrl)) { phase in
     switch phase {
         case .empty: ProgressView()
             
         case .success(let image):
             image.resizable()
                // ....
                 .onAppear {
                     self.images[index] = image
                 }
             
         case .failure: Image(systemName: "wifi.slash")
         @unknown default: EmptyView()
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.