我想分离视图,我创建了一个 struct 视图来只获取图像,以使代码更干净,请询问我如何将选定的图像传递到下一个视图,以使代码更干净,并可以在项目中的任何地方使用此 struct 视图. 我放入了Second view PickAPhoto(),但我不确定如何从其中获取数据.

非常感谢,

struct PickAPhoto: View {
    @State var imgSelected: UIImage = UIImage(named: "addCameraImg")!
    @State var showAddPhotoSheet = false
    // phppicker begin
        @State private var showPhotoSheet = false
    // phppicker end
    @State private var sourceType: UIImagePickerController.SourceType = .camera
    @State var image: Image? = nil
    
    var body: some View {
        Image(uiImage: imgSelected)
            .resizable()
            .cornerRadius(4)
          //  .frame(width: 200 , height: 200)
            .padding(.top)
            .aspectRatio(contentMode: .fit)
            .frame(maxWidth: 200, maxHeight: 200)
            .transition(.slide)
        HStack {
            
            Spacer()
            Button(action: {showAddPhotoSheet.toggle()}) {
                Label("Take a photo", systemImage: "camera")
                    .foregroundColor(Color("BrandPrimary"))
            }
            .sheet(isPresented: $showAddPhotoSheet){
                ImagePicker(imageSelected: $imgSelected, sourceType: $sourceType)
               // ImageViewPicker()
            }
            
            
              Button(action: { showPhotoSheet = true }) {
                Label("Choose photo", systemImage: "photo.fill")
                      .foregroundColor(Color("BrandPrimary"))

              }
                .fullScreenCover(isPresented: $showPhotoSheet) {
                PhotoPicker(filter: .images, limit: 1) { results in
                  PhotoPicker.convertToUIImageArray(fromResults: results) { (imagesOrNil, errorOrNil) in
                    if let error = errorOrNil {
                      print(error)
                    }
                    if let images = imagesOrNil {
                      if let first = images.first {
                        print(first)
                       // image = first
                          imgSelected = first
                      }
                    }
                  }
                }
                .edgesIgnoringSafeArea(.all)
              }

            
            
            Spacer()
            
        }

       }
    
    
}


struct SecondVIew: View {
    
 
    var body: some View {
PickAPhoto()
      }
    func getImage(){
// I want to get the image here
}

}

推荐答案

imgSelected真值源状态在View层次 struct 中向上移动,并向下传递写访问绑定.

struct SecondVIew: View {
    @State var imgSelected: UIImage = UIImage(named: "addCameraImg")!
 
    var body: some View {
        PickAPhoto(imgSelected: $imgSelected)
    }
}

struct PickAPhoto: View {
    @Binding var imgSelected: UIImage

Swift相关问答推荐

TabView中的视频播放器意外播放

是否有一个Kotlin等价的Swift s @ AddendableReport注释'

格式化单位和度量值.为什么从符号初始化的单位不能产生与静态初始化相同的结果

为SwiftUI文本视图提供固定宽度,并仅在文本换行时使文本视图底部增大

同时具有每个文本的标识符的文本组的可扩展性标识符

try 从闭包访问返回的字符串时出现无法将类型 '()' 的返回表达式转换为返回类型 'String'编译器错误

是否可以使用一个 NSRegularExpression 同时判断字符串格式并提取子字符串?

如何判断设备是否为 Vision Pro - Xcode 15 Beta 4

SwiftUI 中的同一个 ForEach 中是否可以有 2 个数组?

VisionOS TabBar预览中是否存在漏洞?

SwiftUI如何能够在Text中使用字符串字面量来创建LocalizedStringKey?

SwiftUI:列表背景为空列表时为黑色

如何修改下面的代码,使图像 Select 的顺序与使用快速并发的图像呈现的顺序相匹配?

MacOS KIND 是如何实现的

这是 Int64 Swift Decoding 多余的吗?

有什么方法可以快速为泛型参数分配默认值?

Swift 2 中的新 @convention(c):我该如何使用它?

'#selector' 的参数不引用 '@objc' 方法、属性或初始化程序

在 Swift 中从服务器播放视频文件

如何快速格式化用户显示(社交网络等)的时间间隔?