我希望你们能在这里为我提供帮助,对于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)
}
}
答案 0 :(得分:1)
我在这里找到了答案: How to update a SwiftUI view state from outside (UIViewController for example) 如果您的数据源是外部的,则@State错误。 改用@ObjectBinding。