如何通过 SwiftUI 显示来自 Firebase 存储的图像

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

我想显示最多 4 张图像。 但是 ex) 它可以是 0 个图像和 2 个图像。 如果图像不是 4 张图像,我想显示其他图像。 我该如何解决?我想我应该使用数组。

但是我不知道如果图片不是4张图片,其他占位符图片如何动态显示。

struct Post: Identifiable, Decodable,Encodable{
    @DocumentID var id: String?
    var imageUrls: [String]?
}
import SwiftUI
import Kingfisher
import Firebase

struct PostContent: View {
    let post: Post
    
   
  @State var selectedImages:[UIImage]
  @State var postImages = [Image]()
  @State var selectedImage: UIImage?
  @State var postImage: Image?
  @State var imagePickerPresented = false
    @State var isPhotolibrary = false
    @State var isShowAction = false
    var body: some View {
        ScrollView(.horizontal){
                LazyHStack(spacing: 16){
                    ForEach(post.imageUrls){imageUrl in
                        if let image = postImages{
                                Button(action: {
                                    isShowAction.toggle()
                                }){
                                    image
                                        .resizable()
                                        .scaledToFill()
                                        .frame(width: 150,height: 150)
                                        .foregroundColor(.gray)
                                        .padding()
                                }
                            }else if let image = imageUrl{
                                Button(action:{
                                   isShowAction.toggle()
                                }){
                                    KFImage(URL(string: image))
                                        .resizable()
                                        .scaledToFill()
                                        .frame(width: 150,height: 150)
                                        .foregroundColor(.gray)
                                        .padding()
                               }
                            }else if postImage == nil{
                                Button(action:{
                                    isShowAction.toggle()
                                }) {
                                    Image(systemName: "person.crop.rectangle.badge.plus.fill")
                                        .resizable()
                                        .scaledToFill()
                                        .frame(width: 150, height: 150)
                                        .foregroundColor(.gray)
                                       .padding()
                               }
                            }
                    }
                }
            }
.sheet(isPresented: $imagePickerPresented, onDismiss: loadImage, content:{
            
            if isPhotolibrary{
                MultipleAlbumPicker(images: $selectedImages)
            }else{
                ImagePicker(image: $selectedImage)
            }
            
            
            }
        )
        .actionSheet(isPresented: $isShowAction) {
            ActionSheet(title: Text("confirm"),
                        message: Text("please select"),
                        buttons: [
                            .default(Text("camera"),action: {
                                isPhotolibrary = false
                                imagePickerPresented.toggle()
                            }),
                            .default(Text("photo Library"),action: {
                                isPhotolibrary = true
                                imagePickerPresented.toggle()
                            }),
                            .cancel()
            ])
        }
     .onChange(of: selectedImages) { newValue in
            for selectedImage in selectedImages{
                let postImage = Image(uiImage: selectedImage)
                postImages.append(postImage)
            }
        }
    }
}

extension PostContent{
    func loadImage(){
        guard let selectedImage = selectedImage else{ return }
        postImage = Image(uiImage: selectedImage)
        if let postImage = postImage{
            postImages.append(postImage)
        }
        
    }
}

在我的代码中,这不好。 我想从以前存储的 firebase 存储用户加载图像。 所以

Post
模型有imageUrls。 如果 imageUris 有 url,它应该显示。但任何时候它都可以通过 PhotoPicker 进行更新。 我应该将
selectedImages
数组和
post.imageUrls
合并到一个数组吗? 谢谢

swift firebase swiftui firebase-storage
© www.soinside.com 2019 - 2024. All rights reserved.