我有一个SwiftUI视图:
struct CatView : View {
@State var eyesOpened: Bool = false
var body: some View {
Image(uiImage: eyesOpened ? #imageLiteral(resourceName: "OpenedEyesCat") : #imageLiteral(resourceName: "ClosedEyesCat"))
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其与常规UIViewController集成。
let hostingVC = UIHostingController<CatView>(rootView: cat)
addChild(hostingVC)
view.addSubview(hostingVC.view)
hostingVC.view.pinToBounds(of: view)
Run Code Online (Sandbox Code Playgroud)
现在在UIViewController中,如果我尝试设置eyesOpened属性,则会得到一个
Thread 1: Fatal error: Accessing State<Bool> outside View.body
我们应该如何做这项工作?SwiftUI视图是否不应该在这种情况下工作?
@State是在这里使用错误的东西。您需要使用@ObservedObject。
@State:用于在您的SwiftUI视图本地发生更改时使用-例如,您可以从自身的SwiftUI视图中更改从toggle或按钮等所打开的eyeOpens。
@ObservedObject:将您的SwiftUI视图绑定到外部数据源-即传入通知或数据库中的更改,这是您的SwiftUI视图外部的内容。
我强烈建议您观看以下WWDC视频-SwiftUI的数据流
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |