Swiftui 有没有办法有条件地翻转HStack的顺序';什么内容?

Swiftui 有没有办法有条件地翻转HStack的顺序';什么内容?,swiftui,Swiftui,我正在使用HStack在视图层次结构中布局一些元素。我希望能够有条件地翻转元素的顺序 HStack{ 文本(“你好”) 文本(“世界”) } 这个想法是,根据视图的状态,它将被布局为“Hello World”或“World Hello” HStack本身不提供任何功能,但如果试图使用其他ViewBuilder、基于ForEach的方法等,试图将其从视图中移除似乎是不可能的 解决这个问题的唯一方法是完全指定两种布局,这是我试图避免的 let isfliped:Bool HStack{ 如果我翻了

我正在使用
HStack
在视图层次结构中布局一些元素。我希望能够有条件地翻转元素的顺序

HStack{
文本(“你好”)
文本(“世界”)
}
这个想法是,根据视图的状态,它将被布局为“Hello World”或“World Hello”

HStack
本身不提供任何功能,但如果试图使用其他ViewBuilder、基于ForEach的方法等,试图将其从视图中移除似乎是不可能的

解决这个问题的唯一方法是完全指定两种布局,这是我试图避免的

let isfliped:Bool
HStack{
如果我翻了{
文本(“世界”)
文本(“你好”)
}否则{
文本(“你好”)
文本(“世界”)
}
}

在使用ViewBuilder的基础上,这里有一种适用于任何容器中任何视图对的通用方法

使用Xcode 12进行测试

struct TestHStackFlip:View{
@状态私有变量翻转=false
var body:一些观点{
VStack{
HStack{
翻转组(如果:翻转){
文本(“文本1”)
文本(“文本2”)
}
}.animation(.default)//可设置动画
分隔器()
按钮(“翻转”){self.flipped.toggle()}
}
}
}
@视图生成器
func FlipGroup(如果值为Bool,
@ViewBuilder uContent:@escaping()->TupleView->一些视图{
让pair=content()
如果值{
TupleView((pair.value.1,pair.value.0))
}否则{
TupleView((pair.value.0,pair.value.1))
}
}

这是一个非常有趣的方法,谢谢分享!
struct TestHStackFlip: View {
    @State private var flipped = false
    var body: some View {
        VStack {
            HStack {
                FlipGroup(if: flipped) {
                    Text("Text1")
                    Text("Text2")
                }
            }.animation(.default)     // animatable
            Divider()
            Button("Flip") { self.flipped.toggle() }
        }
    }
}

@ViewBuilder
func FlipGroup<V1: View, V2: View>(if value: Bool,
                @ViewBuilder _ content: @escaping () -> TupleView<(V1, V2)>) -> some View {
    let pair = content()
    if value {
        TupleView((pair.value.1, pair.value.0))
    } else {
        TupleView((pair.value.0, pair.value.1))
    }
}