Программа SwiftUI c навигация. Как использовать Binding <Bool>, когда метод ожидает Binding ? - PullRequest
0 голосов
/ 07 августа 2020

Я создаю программы c навигации в приложении SwiftUI. Я хочу открывать экраны при изменении модели, а не когда пользователь просто нажимает кнопку. Я хочу, чтобы мой код был информативным, без лишних опций. Проблема в том, что некоторые методы SwiftUI ожидают увидеть Binding<Bool?> вместо более описательного Binding<Bool>. Пример:

class NavigationState: ObservableObject {
    @Published var showNextScreen: Bool = false
}

struct FirstView: View {
    @EnvironmentObject var navigationState: NavigationState

    var body: some View {
        NavigationLink("Show next screen",
                       destination: NextView(),
                       tag: true,
                       selection: $navigationState.showNextScreen)  // <--- Error: Cannot convert value of type 'Binding<Bool>' to expected argument type 'Binding<Bool?>'
    }
}

Есть ли способ создать программу c навигацию без создания опций ivar во всем приложении, изменив @Published var showNextScreen: Bool = false на @Published var showNextScreen: Bool? = false Потому что измените его на необязательный сделает код менее информативным, чем он должен быть.

1 Ответ

0 голосов
/ 07 августа 2020

Существует инициализатор , который преобразует Binding<V> в Binding<V?>, поэтому вам просто нужно сделать:

NavigationLink("Show next screen",
               destination: NextView(),
               tag: true,
               selection: Binding($navigationState.showNextScreen))

В некотором роде, используя другой инициализатор, вы также можете преобразовать Binding<V?> в Binding<V>? (ответьте мной).

...