繁体   English   中英

SwiftUI - 带有用于切换 Bool 变量的按钮的数组列表

[英]SwiftUI - List of an array with a button that toggles a Bool variable

我正在尝试创建一个简单的代码:我有一个包含三个对象的“数组”,每个对象都包含一个 boolean 值。 我想创建一个列表,为每个 object 创建一个按钮,当我单击该按钮时,object 的值会切换。 我试过了,但我收到一条错误消息:“无法分配给属性:'n' 是一个 'let' 常量”。 你有什么建议或简单的代码给我吗?

import SwiftUI

struct Object {
   var id = UUID()
   var selected : Bool
}

struct ContentView: View {

   var array = [Object( selected: false), Object(selected: false), Object(selected: false)]

   var body: some View {

       ForEach(array, id: (\.id)) { n in
           VStack {
               Button( action: { n.selected = true }) { Text("Change")}
           }
       }
   }
}

您不能更改块中传递的变量,因为它是不可变的。 它只是您的列表元素的副本,而不是您的实际列表元素。

你想要的另一种实现是这样的:

import SwiftUI

struct Object {
    var id = UUID()
    var selected: Bool
}

struct ContentView: View {
    @State var array = [Object(selected: false), Object(selected: false), Object(selected: false)]

    var body: some View {
        ForEach(array.indices) { index in
            VStack {
                Button(action: { self.array[index].selected = true }) {
                    Text("Change: \(self.array[index].selected.description)")
                }
            }
        }
    }
}

我添加了 @State 装饰器,它是您能够在数组中进行更改刷新视图所必需的,并且我还更改了获取值的方式,直接从数组中获取它,而不是从参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM