SwiftUI-取决于多个条件

SwiftUI-取决于多个条件,swiftui,Swiftui,是否可能依赖于SwiftUI中的多个条件?例如,要显示图纸,请执行以下操作: .sheet(isPresented: $stateA && $stateB, content: { ... }) // this is not working 或者已知另一种方法吗?不,不可能!isPresented accept Binding,这意味着如果工作表将被取消,则状态将被更新。州A和州B中的哪一个必须改变?还是两者都有?即使有人试图在左右两侧绑定的位置定义&&运算符,这也是一个非常糟糕

是否可能依赖于SwiftUI中的多个条件?例如,要显示图纸,请执行以下操作:

.sheet(isPresented: $stateA && $stateB, content: { ... }) // this is not working

或者已知另一种方法吗?

不,不可能!isPresented accept Binding,这意味着如果工作表将被取消,则状态将被更新。州A和州B中的哪一个必须改变?还是两者都有?即使有人试图在左右两侧绑定的位置定义&&运算符,这也是一个非常糟糕的主意。别想这么做

将逻辑移动到您的模型,最好在任何视图之外

更新(针对Asperi)

这是有效代码(带扩展名)

试试看!按TestIt将打开工作表。没有“返回”按钮,但您可以用众所周知的手势将其取消。然后再次尝试按TestIt…

“我只能给你看门…”(c)Morpheus

今天是运算符重载的日子:^),下面是您的案例(使用Xcode 11.3+测试)

扩展绑定,其中Value==Bool{
静态函数&(lhs:Binding,rhs:Binding)->Binding{
返回绑定(get:{lhs.wrappedValue&&rhs.wrappedValue},
集合:{uin})
}
}
结构TestCustomBinding:视图{
@状态私有变量isFirst=true
@状态私有变量isSecond=false
var body:一些观点{
VStack{
按钮(“测试”){
self.isSecond=true
}
.工作表(显示:$isFirst&$isSecond){
按钮(“关闭我”){
//工作表必须通过其中一个状态显式关闭!
self.isSecond=false
}
}
}
}
}

可以从变量中获取不同的条件

struct ChangingButton: View { 
var text: String
var onButton: String
var offButton: String 
var changeButton: Bool

 var buttonCondition: String {
    if isOn {
        return isOnImage
    } else {
        return isOffImage
    }
}
var body: some View {

    Button(action: {
        action()
    }
    , label: {
        VStack {
           Image(systemName: buttonCondition)             
            Text(text)
        }
    })
 }
}
struct ChangingButton_Previews: PreviewProvider {
static var previews: some View {
    ChangingButton(text: "My Button", onButton: "on", offButton: "off", changeButton: true, action: {
    }).background(Color.black)
}
.-)你甚至可以定义| |运算符,没有人能阻止你。。。我不想阻止你,但请看我的最新答案
struct ChangingButton: View { 
var text: String
var onButton: String
var offButton: String 
var changeButton: Bool

 var buttonCondition: String {
    if isOn {
        return isOnImage
    } else {
        return isOffImage
    }
}
var body: some View {

    Button(action: {
        action()
    }
    , label: {
        VStack {
           Image(systemName: buttonCondition)             
            Text(text)
        }
    })
 }
}
struct ChangingButton_Previews: PreviewProvider {
static var previews: some View {
    ChangingButton(text: "My Button", onButton: "on", offButton: "off", changeButton: true, action: {
    }).background(Color.black)
}