我在将类的状态持久化到SwiftUI结构的视图中时遇到问题。
我有一个在一个文件中定义的充当控制器的类,以及一个SwiftUI视图,该视图应该根据控制器中的属性进行更改。
我已经将这些文件定义为:
时钟控制器swift
class ClockController:ObservableObject {
@Binding var isAM:Bool
init(){
self.isAM = false
}
func toggleAMPM(){
self.isAM = !self.isAM
}
}
和TestUI.swift
struct TestUI:View{
@ObservedObject var clockController:ClockController = ClockController()
var body: some View {
Button(action: {
self.clockController.toggleAMPM()
}){
Text("Toggle")
}
Text(self.clockController.isAM ? "AM" : "PM")
}
}
我希望每次self.clockController.isAM变量更改时(当按下切换按钮时(,TestUI都会更改/重新渲染,这就是为什么我将clockController设置为ObservableObject,并将@Binding关键字添加到isAM属性中。然而,我在ClockController的初始化器方法上的设置不断出现以下错误:
'self' used in property access 'isAM' before all stored properties are initialized
和Return from initializer without initializing all stored properties
如何使我的TestUI绑定到ClockController的isAM变量?
all!我自己解决了这个问题。我需要从ClockController的isAM属性中删除@Binding关键字,并将其更改为@Published
。成功了。
工藤的YouTube和这个视频:https://youtu.be/-yjKAb0Pj60?t=919