Xcode 在UIViewControllerRepresentable中传递数据

Xcode 在UIViewControllerRepresentable中传递数据,xcode,swiftui,pdfkit,Xcode,Swiftui,Pdfkit,我正在尝试使用UIKit创建一个PDFView,并将以前的SwiftUI视图中的数据传递给它。数据本身是一个带有文件名的字符串。不知何故,字符串没有从UIViewControllerRepresentable传递到UIViewController,并且它保持为空。我真的找不到发生这种事情的原因。你能查一查我哪里错了吗?我希望这个代码足够了 我正在使用NavigationLink(目标:FileViewerRapper(文件:“某些字符串”){} 导入PDFKit 导入UIKit 导入快捷键 设p

我正在尝试使用UIKit创建一个PDFView,并将以前的SwiftUI视图中的数据传递给它。数据本身是一个带有文件名的字符串。不知何故,字符串没有从UIViewControllerRepresentable传递到UIViewController,并且它保持为空。我真的找不到发生这种事情的原因。你能查一查我哪里错了吗?我希望这个代码足够了

我正在使用NavigationLink(目标:FileViewerRapper(文件:“某些字符串”){}

导入PDFKit
导入UIKit
导入快捷键
设pdfView=pdfView()
类FileViewer:UIViewController{
var file=String()
重写func viewDidLoad(){
super.viewDidLoad()
打印(“\n\n\n---------------------------\(文件)\n-----------------\n\n”)
pdfView.translatesAutoResizengMaskintoConstraints=false
view.addSubview(pdfView)
pdfView.leadingAnchor.constraint(等式:view.SafeArealLayoutGuide.leadingAnchor).isActive=true
pdfView.trailingAnchor.constraint(等式:view.SafeArealLayoutGuide.trailingAnchor).isActive=true
pdfView.topAnchor.constraint(equalTo:view.SafeArealLayoutGuide.topAnchor).isActive=true
pdfView.bottomAnchor.constraint(equalTo:view.safeAreaLayoutGuide.bottomAnchor).isActive=true
guard let path=Bundle.main.url(forResource:file,扩展名:“pdf”,子目录:“Files”)else{return}
如果let document=PDFDocument(url:path){
pdfView.document=文档
}
}
}
结构文件ViewerRapper:UIViewControllerRepresentable{
变量文件:字符串
typealias UIViewControllerType=FileViewer
func makeUIViewController(上下文:UIViewControllerRepresentableContext)->FileViewerRapper.UIViewControllerType{
返回FileViewer()
}
func updateUIViewController(uUIViewController:FileViewerRapper.UIViewControllerType,上下文:UIViewControllerRepresentableContext){
uiViewController.file=文件
//当我把打印(文件)放在这里时,它是好的
}
}
结果是: //----------------------- //-------------------------------

应该是: //----------------------- 一串
//-------------------------------我想我已经搞定了:

func makeUIViewController(context: UIViewControllerRepresentableContext<FileViewerWrapper>) -> FileViewerWrapper.UIViewControllerType {
    let uiViewController = FileViewer()
    uiViewController.file = file

       return uiViewController
   }
func makeUIViewController(上下文:UIViewControllerRepresentableContext)->FileViewerRapper.UIViewControllerType{
让uiViewController=FileViewer()
uiViewController.file=文件
返回uiViewController
}

func updateUIViewController现在为空

当您只想传递数据时,请使用一个单独的
UIViewControllerRepresentable
,它将拥有您的UIViewController,然后将数据从视图传递到ViewController

struct CameraViewControllerRepresentable : UIViewControllerRepresentable {
    typealias UIViewControllerType = CameraViewController
    var patientObject: PatientObj

    public func makeUIViewController(context: UIViewControllerRepresentableContext<CameraViewControllerRepresentable>) -> CameraViewController {
        let cameraVC = UIStoryboard(name: "Camera", bundle: nil).instantiateViewController(identifier: String(describing: CameraViewController.self)) as! CameraViewController
        cameraVC.patientObj = patientObject
        return cameraVC


       }

    func updateUIViewController(_ uiViewController: CameraViewController, context: UIViewControllerRepresentableContext<CameraViewControllerRepresentable>) {

    }

}
struct-CameraViewControllerRepresentable:UIViewControllerRepresentable{
typealias UIViewControllerType=CameraViewController
var patientObject:PatientToBj
public func makeUIViewController(上下文:UIViewControllerRepresentableContext)->CameraViewController{
让cameraVC=UIStoryboard(名称:“Camera”,捆绑包:nil)。实例化eViewController(标识符:String(描述:CameraViewController.self))为!CameraViewController
cameraVC.patientObj=patientObject
返回摄像机
}
func updateUIViewController(uViewController:CameraViewController,上下文:UIViewControllerRepresentableContext){
}
}
struct CameraViewControllerRepresentable : UIViewControllerRepresentable {
    typealias UIViewControllerType = CameraViewController
    var patientObject: PatientObj

    public func makeUIViewController(context: UIViewControllerRepresentableContext<CameraViewControllerRepresentable>) -> CameraViewController {
        let cameraVC = UIStoryboard(name: "Camera", bundle: nil).instantiateViewController(identifier: String(describing: CameraViewController.self)) as! CameraViewController
        cameraVC.patientObj = patientObject
        return cameraVC


       }

    func updateUIViewController(_ uiViewController: CameraViewController, context: UIViewControllerRepresentableContext<CameraViewControllerRepresentable>) {

    }

}