Swiftui ForEach视图可以';t将“视图”修改器应用于选定视图

Swiftui ForEach视图可以';t将“视图”修改器应用于选定视图,swiftui,Swiftui,我有一个简单的水平列表视图,显示颜色列表,问题是我不知道如何将边框仅应用于一个选定的视图,因为现在它正在didTap上向列表中的所有视图添加白色边框,如果您知道如何实现,请帮助,谢谢您需要存储所选颜色的id,而不是bool 这是一个简单的演示(点击相同元素时取消选择是您的附加工作)。使用Xcode 12.5/iOS 14.5进行测试 struct ContentView:View{ @选择的状态私有var=-1//完全有意义,感谢您提供简单而好的解决方案 struct ContentView:

我有一个简单的水平列表视图,显示颜色列表,问题是我不知道如何将边框仅应用于一个选定的视图,因为现在它正在didTap上向列表中的所有视图添加白色边框,如果您知道如何实现,请帮助,谢谢您需要存储所选颜色的
id
,而不是bool

这是一个简单的演示(点击相同元素时取消选择是您的附加工作)。使用Xcode 12.5/iOS 14.5进行测试

struct ContentView:View{

@选择的状态私有var=-1//完全有意义,感谢您提供简单而好的解决方案
struct ContentView: View {
    @State private var selected = -1          // << here !!
    @State private var colors: [Colour] = [
        Colour(id: 1, color: .black),
        Colour(id: 2, color: .yellow),
        Colour(id: 3, color: .orange),
        Colour(id: 4, color: .green),
        Colour(id: 5, color: .red),
        Colour(id: 6, color: .blue),
        Colour(id: 7, color: .pink),
        Colour(id: 8, color: .purple),
    ]

    var body: some View {
        ZStack {
            Color.gray.opacity(0.2)
                .ignoresSafeArea()

            ScrollView(.horizontal, showsIndicators: false) {
                HStack(spacing: 4) {
                    ForEach(colors) { color in
                        Rectangle()
                            .fill(color.color)
                            .frame(width: 100, height: 150)
                            .overlay(
                                Rectangle()
                                    .stroke(selected == color.id ? Color.white : .clear, lineWidth: 5)
                                    .animation(.spring())
                            )
                            .padding(5)
                            .onTapGesture {
                                selected = color.id    // << here !!
                                print(color.id)
                            }
                    }
                }
                .padding(.leading, 8)
            }
        }
    }
}