@EnvironmentObject в SwiftUI - не может переключать bool - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть класс ниже, чтобы сохранить состояние меню гамбургера, если оно отображается или нет

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")
            }
        }

    }
}

Это ошибка, которую я получаю: Невозможно вызвать инициализатор для типа 'Button' со списком аргументов типа '( действие: @escaping () -> (), @escaping () -> текст) '

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Вы создали пользовательское представление с именем Button, которое находится в конфликте с собственным SwiftUI Button (поскольку они имеют одинаковые имена).

Переименуйте ваше представление Button, и оно будет в порядке. думаю.

1 голос
/ 21 февраля 2020

Проблема в том, что вы назвали свой пользовательский 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")
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...