我有下面的课程来保持汉堡菜单的状态是否显示

class Menu: ObservableObject {
    @Published var isActive: Bool = false
}

我在场景委托中实例化它

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' 的初始化程序

#1楼 票数:1 已采纳

问题是您将自定义View命名为Button ,这也是现有SwiftUI按钮的名称。

只需将您的struct重命名为其他名称,您的代码就会编译得很好。

与您的问题无关,但将单个View包装在VStack中没有VStack ,您的body可以简单地包含Button

struct MyButton: View {

    @EnvironmentObject var menuState: Menu

    var body: some View {
        Button(action: {
            self.menuState.isActive.toggle()
        }) {
            Text("A")
        }
    }
}

#2楼 票数:1

您创建了一个名为Button的自定义视图,该视图与本机 SwiftUI Button冲突(因为它们具有相同的名称)。

重命名您的Button视图,我认为它会很好。

  ask by Dan translate from so

未解决问题?本站智能推荐:

1回复

无法在控制器中获取 @EnvironmentObject

我正在尝试使用 @EnvironmentObject 来控制我的应用程序的某些方面。 我遇到的问题是我的一个控制器无法访问环境对象。 我收到致命错误“找不到环境类型的@ObservableObject”。 我搜索了其他问题,我能找到的每个解决方案都包括将.environmentObject(myE
1回复

是否可以访问 init 中的 environmentObject 变量?

是否可以在结构中访问 init 函数内的 environmentObject 变量? 我试过这样,但没有让它工作。 我收到此错误: 我已将 environmentObject 添加到 SceneDelegate 并且可以访问我的 UI 中的变量。
1回复

SwiftUI 设置将触发视图刷新的外部变量

iOS 13、Swift 5、Xcode 11.3.1 学习 SwiftUI。 我把它放在一起,它有效,但它是正确的。 在External.swift 中 在ContentView.swift 中 当我在External.swift 中写入 globalBlob 时,它会更新显示。
2回复

SwiftUI 全局 var 和 func 在启动时

我有这个解析 json 的函数。 然后我使用数据来填充一堆 UI 插槽。 问题是它是一个很大的 json(如果 10.1MB 很大),加载需要 5-8 秒。 在应用程序发布时这没什么大不了的,但现在它每次都在重复这些数据。 现在我只有这种模式,每个结构视图都以: 我一生都找不到如何创建全局变量
1回复

如何在 SwiftUI 中检查 EditButton/EditMode 状态

我有以下测试代码。 但是当点击“编辑”按钮时,文本不会改变。 我找不到任何关于那的东西。 如何检查/控制 editButton/editMode 状态变化?
1回复

有没有办法在 SwiftUI 视图和与其间接相关的类之间设置一个全局变量?

我正在处理一个 MacOS Swift 项目(使用 SwiftUI),并且在事件发生时更新文本标签时遇到问题。 struct ContentView: View { @State var now = globalString.stringy var body: some View {
1回复

有没有办法根据 SwiftUI 中的环境变量更改视图?

我希望能够通过点击按钮来更改 SwiftUI 中的视图。 我有按钮设置来切换环境变量如下 我还在这里声明了 Observable 对象 最后,我在开始时加载的视图中有一个 ViewBuilder 设置,用于监听变量的变化并相应地切换视图,但是当加载应用程序并点击按钮时,应用程序冻结并保持无响
1回复

切换绑定使用 SwiftUI 按钮操作

我正在尝试在 SwiftUI 中创建一个简单的带标签的复选框,当按下按钮时切换isChecked 。 它与 Apple 的Binding文档中的示例非常相似: import SwiftUI struct LabeledCheckbox: View { var labelText: Stri