SwiftUI: Как использовать оператор `!` Перед оператором связываемого объекта `$`? - PullRequest
2 голосов
/ 05 февраля 2020

Я не могу использовать логический оператор не ! с Bindable $ объектом.

Вот сценарий, который я хочу -

struct ContentView: View {
@State private var isLoggedIn:Bool = true
var body: some View {

    Text("Root View")
        .sheet(isPresented: !self.$isLoggedIn) {
            SignInView()
        }
        .onAppear { self.performAuthentication() }
   }
}

Представление «Вход в систему» ​​должно появиться, как только я установлю isLoggedIn = false с помощью некоторого действия кнопки. Для которого я должен использовать логический оператор not перед $.

Ошибка компилятора: невозможно преобразовать значение типа «Binding» в ожидаемый тип аргумента «Bool»

Как мне этого добиться?

1 Ответ

4 голосов
/ 05 февраля 2020

Как я сказал в комментарии к вопросу, был опубликован подход для SwiftUI: преобразовать Binding в другой Binding . Если, однако, вы хотите явно указать его как оператор, вы можете использовать следующее (протестировано и работает с Xcode 11.2)

extension Binding where Value == Bool {
    static prefix func !(_ lhs: Binding<Bool>) -> Binding<Bool> {
        return Binding<Bool>(get:{ !lhs.wrappedValue }, 
                             set: { lhs.wrappedValue = !$0})
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...