我有一个表格视图,每个单元格都打算链接到字典中的数组。
var buttonAction : [String: [ButtonAction]] = [:]
下面是buttonAction的结构
struct ButtonAction: Codable {
var action: String
var array_linked_of_buttons: [[String:String]]
init(action: String, array_linked_of_buttons: [[String:String]]) {
self.action = action
self.array_linked_of_buttons = array_linked_of_buttons
}
}
解释整个代码有点复杂,但是当我将两个按钮连接在一起时,我可以获得变量“ singleAction”的数据,然后可以将其添加到按钮动作字典“ array_linked_of_buttons”中。
let singleAction = [linkedButtonUUID: connectorMarker.UUIDpic.uuidString, linkedButtonCategory: "", linkedButtonName: connectorMarker.name]
let mainMarkerAction = mainMarker.buttonAction["button actions array"]!
for existingMarker in mainMarkerAction {
actionArray.append(existingMarker)
}
var actionSub = actionArray[indexRowTag].array_linked_of_buttons
if let addAction = actionSub.filter({$0[linkedButtonUUID] == connectorMarker.UUIDpic.uuidString}).first {
print("MARKER Exists", addAction)
} else {
actionSub.append(singleAction)
print("UPDATED MARKER", actionSub)
}
let action = ButtonAction(action: actionArray[indexRowTag].action, array_linked_of_buttons: actionSub)
//ISSUE--?? mainMarker.buttonAction.updateValue(VALUE forKey: "button actions array")
saveData()
我可以锻炼字典中的哪些项目需要编辑,但是如何更新该特定值?我真的很困惑,它只是创建了一个新项目,但我想更新上一个项目。
因此,例如,我想添加项目0的“ array_linked_buttons”,并添加4个项目,而不是3个。
我搜索了其他问题,但仍可以解决。 非常感谢您向我指出正确的方向!
答案 0 :(得分:0)
发生复制而不是更改值的原因,是因为您将struct
用于ButtonAction
,它具有值的语义,并在分配给任何变量时快速创建副本。
您需要改用class
。类具有引用语义,因此它不会在分配变量时创建新实例,因此您将能够更新所需实例的属性。
答案 1 :(得分:0)
我知道我正在更新主字典数组,而不是嵌套数组。 下面的代码是我最后使用的代码。
let singleAction = [linkedButtonUUID: connectorMarker.UUIDpic.uuidString, linkedButtonCategory: "", linkedButtonName: connectorMarker.name]
var mainMarkerAction = mainMarker.buttonAction["button actions array"]!
for existingMarker in mainMarkerAction {
actionArray.append(existingMarker)
}
var actionSub = actionArray[indexRowTag].array_linked_of_buttons
if let addAction = actionSub.filter({$0[linkedButtonUUID] == connectorMarker.UUIDpic.uuidString}).first {
print("MARKER HERE", addAction)
} else {
actionArray[indexRowTag].array_linked_of_buttons.append(singleAction)
}
mainMarkerAction[indexRowTag] = actionArray[indexRowTag]