我有下面的课程来保持汉堡菜单的状态(无论是否显示)
class Menu: ObservableObject {
@Published var isActive: Bool = false
}
我在Scene Delegate中将其实例化
let contentView = ContentView().environmentObject(Menu())
然后在一个简单的视图中,我试图切换isActive bool,但是在下面出现错误
struct Button: View {
@EnvironmentObject var menuState: Menu
var body: some View {
VStack{
Button(action: {
self.menuState.isActive.toggle()
}) {
Text("A")
}
}
}
}
这是我得到的错误:无法使用类型为'(action:@escaping()->(),@escaping()-> Text)'的参数列表来调用'Button'类型的初始化程序
答案 0 :(得分:1)
问题是您将自定义View
命名为Button
,这也是现有SwiftUI
按钮的名称。
只需将您的struct
重命名为其他名称,您的代码就可以正常编译。
与您的问题无关,但是将单个View
包裹在VStack
中没有意义,您的body
可以仅包含Button
。
struct MyButton: View {
@EnvironmentObject var menuState: Menu
var body: some View {
Button(action: {
self.menuState.isActive.toggle()
}) {
Text("A")
}
}
}
答案 1 :(得分:1)
您创建了一个名为Button
的自定义视图,该视图与本机SwiftUI Button
冲突(因为它们的名称相同)。
重命名您的Button
视图,我认为这很好。