SwiftUI:致命错误:在View.body外部访问State <String>”

时间:2019-06-28 15:10:03

标签: swift swiftui

我希望你们能在这里为我提供帮助,对于Swift来说,我一般还是陌生的。

我在SwiftUI中有一个MainView,这是我的rootViewController。

其中有一个@State var myString:绑定到文本字段的字符串。

有一个按钮,当按下该按钮时,它会显示来自rootViewController的UIViewController“ MyViewController”。

MyViewController有一个委托,该委托调用一个函数委托端,在其中我想将presentingViewController(MyViewController.swift的第11行)中的myString设置为委托(MyDelegate)提供的某个值。

这是发生错误的地方:

线程1:致命错误:在View.body外部访问状态

如何解决此问题?我的目标是呈现UiViewController并从中获取字符串结果,直到绑定到Textfield的MainView的myString变量,以便TextField立即更新。

由于我显然无法从视图外部更改@state variabe,还有其他方法吗?

谢谢!

MainView.swift:

struct MainView : View {  

@State var myString: String = ""

     var body: some View{  

          VStack{  

               TextField($myString)  

               Button(action:{  

                    let rootVC : UIViewController = UIApplication.shared.keyWindow!.rootViewController!  

                    rootVC.present(MyViewController.init(), animated: true, completion: nil)  

                    })  

               }  

}  

}  

MyViewController.swift:

class MyViewController : UIViewController , MyDelegate {  

     override func viewDidLoad(){  

super.viewDidLOad()  

//...some delegatestuff

     }  

     func delegateEnds(withResult result: String!){  

if let presenter = presentingViewController {  

              let pres= presenter as! UIHostingViewController  

              pres.rootView.myString = result.resultString  

          }      

          self.dismiss(animated: true, coimpletion: nil)   

     }  

}  

1 个答案:

答案 0 :(得分:1)

我在这里找到了答案: How to update a SwiftUI view state from outside (UIViewController for example) 如果您的数据源是外部的,则@State错误。 改用@ObjectBinding。