有没有办法例如逻辑上否定Binding<Bool>
?例如,我有一个状态变量
@State var isDone = true
我将其作为出价传递给不同的子视图。然后我想使用它例如与isActive
中的NavigationLink
一起使用,以便仅在not isDone
时显示:
NavigationLink(destination: ..., isActive: ! self.$isDone ) // <- `!` means `not done`
当然,我可以使用isDone -> isNotDone
反转逻辑,但是在许多情况下这是不自然的。那么,有没有简单的方法可以使布尔绑定反向?
答案 0 :(得分:2)
如果我正确理解您的需求,则需要满足以下条件:
extension Binding where Value == Bool {
public func negate() -> Binding<Bool> {
return Binding<Bool>(get:{ !self.wrappedValue },
set: { self.wrappedValue = !$0})
}
}
struct TestInvertBinding: View {
@State var isDone = true
var body: some View {
NavigationView {
NavigationLink(destination: Text("Details"),
isActive: self.$isDone.negate()) {
Text("Navigate")
}
}
}
}
struct TestInvertBinding_Previews: PreviewProvider {
static var previews: some View {
TestInvertBinding()
}
}