Swift: есть ли лучший способ добавить данные в словарь, который является параметром функции? - PullRequest
0 голосов
/ 29 марта 2019

Я передаю словарь в функцию, затем добавляю некоторые данные в этот словарь и снова передаю их другой функции:

f(["initial": "initial"])

func f(_ dictionary: [String: Any]) {
    var mutatingDictionary = dictionary
    mutatingDictionary["test"] = "test"
    anotherFunction(mutatingDictionary)
}

Я хотел знать, есть ли лучший или более изящный способ сделать это, без необходимости писать 3 строки и, возможно, лучший способ обработки переменной (например, без необходимости воссоздавать mutatingDictionary)?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

слияние (_: uniquingKeysWith:) даст вам новую копию без изменчивости.Уникальный параметр делает его многословным, хотя.Полагаю, если вас это беспокоит, вы можете создать свое собственное расширение словаря под названием merging, которое просто всегда будет предоставлять функцию take left для уникального:

f(["initial": "initial"])

func f(_ dictionary: [String: Any]) {
    anotherFunction(dictionary.merging(["test":"test"], uniquingKeysWith: { left, _ in left}))
}
0 голосов
/ 29 марта 2019

Вы можете использовать inout в качестве параметра, и один и тот же словарь может быть видоизменен и может использоваться во всем viewController

var yourDictionary: [String: Any] = ["initial": "initial"]

func f(_ dictionary: inout [String: Any]) {
    dictionary["test"] = "test"
    anotherFunction(&dictionary)
}

func anotherFunction(_ dictionary: inout [String: Any]) {
    dictionary["moreKey"] = "moreValue"
}

f(&yourDictionary)
print(yourDictionary)

Будет печатать

["initial": "initial", "moreKey": "moreValue", "test": "test"]

Может быть, это то, что вы ищете. Надеюсь, это поможет.

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