Swift - обновить значение определенного элемента во вложенном словаре - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть таблица, и каждая ячейка должна быть связана с массивом внутри словаря.

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()

IМожно ли определить, какой элемент словаря необходимо отредактировать, но как мне обновить это конкретное значение?Я действительно запутался, если он просто создает новый элемент, но я хочу обновить предыдущий.

Так, например, я хочу добавить "array_linked_buttons" элемента 0 и иметь 4 элемента вместо 3.

Вот так выглядит мой словарь, если это тоже помогает enter image description here

Я искал других опрошенных, но я все еще решаю его.Любая помощь, указывающая мне правильное направление, очень ценится!

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Я решил, что обновляю основной словарный массив, а не вложенный массив.Код ниже - то, что я использовал в конце.

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]
0 голосов
/ 18 декабря 2018

Копирование вместо изменения значения произошло, потому что вы используете struct для ButtonAction, который имеет семантику значения и быстрое создание копии при присвоении любой переменной.

Вместо этого вам нужно использовать class.Классы имеют ссылочную семантику, поэтому при назначении переменной они не будут создавать новый экземпляр, поэтому вы сможете обновить свойство нужного экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...