如何更改数组中对象的属性值?#迅速


@State private var myBoxArray = Array<Box>()
@State private var amountEligibleForSelection:Int = 0
struct Item: Hashable {
var isCool:Bool? = nil
init(_ isCool:Bool){
self.isCool = isCool
}
}
struct Box: Hashable {
var boxNumber:Int? = nil
var contents:Item? = nil
var isSelected:Bool = false
var revealBoxContents:Bool = false
init(_ contents:Item, _ boxNumber:Int) {
self.contents = contents
self.boxNumber = boxNumber
}
}

func SetupTheBoxs(_ howManyItems:Int) -> Array<Box> {
var preparedBoxs = Array<Box>()
var boxCounter = 0

if boxCounter > howManyItems {
preparedBoxs.append(Box(Item(false), boxCounter-1))
}
print(preparedBoxs)
return preparedBoxs
}
myBoxArray = SetupTheBoxs(3)
func SelectAllBoxes(){
for box in myBoxArray{
if box.isSelected == false && box.contents!.isCool == false {
box.isSelected = true

错误:无法赋值属性:'Box'是一个'let'常量

}
}
}

myBoxArray中的属性状态触发了我的应用程序中的uiview,所以我需要这些值来改变和触发。为什么我不能更改属性值?

我尝试过的事情:

  1. 使用myBoxArray (FAIL)的绑定变量
  2. 为Box结构体添加了一个突变函数来翻转'isSelected':bool (FAIL)
  3. 设置功能逻辑为按钮动作(FAIL)

谁来帮帮我。#哭

您必须改变标记为@State包装器的属性,而不是视图中Box的单独实例。试试。

func SelectAllBoxes(){
for index in 0..<myBoxArray.count{
if myBoxArray[index].isSelected == false && myBoxArray[index].contents!.isCool == false {
myBoxArray[index].isSelected = true
}
}
}

最新更新