如何在SwiftUI中将值从类传递到结构

如何在SwiftUI中将值从类传递到结构,swift,binding,swiftui,swiftui-environment,Swift,Binding,Swiftui,Swiftui Environment,我上课了: class ImagePickerCoordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate, ObservableObject{ @Published var display = "Name" @Binding var image: UIImage? @Binding var isShown: Bool init(image: Bi

我上课了:

class ImagePickerCoordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate, ObservableObject{

    @Published var display = "Name"

    @Binding var image: UIImage?
    @Binding var isShown: Bool

    init(image: Binding<UIImage?>, isShown: Binding<Bool>){
        _image = image
        _isShown = isShown
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

        if let uiImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {

            guard let convertedCIImage = CIImage(image: uiImage) else {
                fatalError("Cannot convert UIImage to CIIMage.")
            }

            detectFlower(image: convertedCIImage) { (flowerString, error) in

                self.display = flowerString!

            }

            image = uiImage
            isShown = false
        }
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        isShown = false
    }

    func detectFlower(image: CIImage,completion: @escaping (_ getString:String?,_ error:Error?)-> Void)  {
     guard let model = try? VNCoreMLModel(for: FlowerModels().model) else {

         fatalError("Cannot import a model.")
     }

     let request = VNCoreMLRequest(model: model) { (request, error) in

         let classification = request.results?.first as? VNClassificationObservation

        let nameOfFlower = String(classification?.identifier ?? "Unexpected type")

         completion(nameOfFlower,nil)

     }

     let handler = VNImageRequestHandler(ciImage: image)

     do {
         try handler.perform([request])
     } catch {
         print(error)
           completion(nil,error)
     }
    }
}

struct ImagePicker: UIViewControllerRepresentable {

    typealias UIViewControllerType = UIImagePickerController
    typealias Coordinator = ImagePickerCoordinator

    @Binding var image: UIImage?
    @Binding var isShown: Bool
    var sourceType: UIImagePickerController.SourceType = .camera

    func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {
    }

    func makeCoordinator() ->ImagePicker.Coordinator {
        return ImagePickerCoordinator(image: $image, isShown: $isShown)
    }

    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {

        let picker = UIImagePickerController()
        picker.sourceType = sourceType
        picker.delegate = context.coordinator

        return picker
    }

}
如何将此文本从类函数传递到结构?

添加到ScenedLegate中

并添加到您的rootViewController:

window.rootViewController = UIHostingController(rootView: contentView.environmentObject(env))
现在,您的ImagePickerCoordinator已连接到您的环境

不要在类中使用@Binding

将@Published用于图像,并在类中显示。 然后,您可以通过env.image访问所有这些变量,例如在ScanWithCamera视图中

let env = ImagePickerCoordinator()
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(env))