我想显示最多 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
合并到一个数组吗?
谢谢