Добавление значений двух словарей [String: Int] в Swift - PullRequest
2 голосов
/ 11 июля 2019

Итак, я пытаюсь добавить значения двух [String : Int] словарей в XCode, используя последний Swift. Мой код показан ниже. Оба словаря имеют ключи от q1 до q23 с прикрепленными значениями. Вот почему случайное число заканчивается на 23. Клавиша q1 не используется в этой функции (именно поэтому случайное число начинается с 2). Значения словаря задаются другим контроллером представления во время перехода к этому viewController, я не назначаю их вручную. Нет необходимости, чтобы значения в словарях были дополнительными, поскольку им будет назначены значения для доступа к этому viewController.

Я в течение часа гуглял, но я не могу понять функции уменьшения, объединения или отображения, как они применимы к этому, и выполнение чего-то настолько сложного, когда я просто хочу добавить, кажется, что я упускаю более простой метод .

var p1Pre:[String:Int]  = [“q1” : 1]

var p2Pre:[String:Int]  = [“q1” : 1]
var combPre:[String:Int]  = [“q1” : 0]

var pick = 0

// generates random number 2-23
func pickRandom(){
    pick = Int.random(in:2...23)
} 

func addPrefs(){
    // this is where i'm having trouble
    combPre[“q\(pick)] = p1Pre[“q\(pick)”] + p2Pre[“q\(pick)”]
    print(combPre[“q\(pick)”]
    // I get an error at the plus sign here
}

Я пытаюсь добавить значения для определенных ключей в двух словарях (p1Pre и p2Pre), и результат будет сохранен в combPre. Я хочу построить функцию, так что если p1Pre[“q2”] == 1 и p2Pre[“q2”] == 2, то combPre[“q2”] = 3. Я получаю сообщение об ошибке со знаком плюс, которое говорит “binary operator “+” cannot be applied to two ‘Int?’ Operands". Как бы я сделал эту работу? Спасибо

1 Ответ

2 голосов
/ 11 июля 2019

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

Вам необходимо рассмотреть случай «что делать, если ключ “q\(pick)” не существует в словаре?», И соответственно развернуть два дополнительных варианта.

На мой взгляд, разумно сделать здесь, когда ключ не существует, просто использовать значение 0, поскольку это тождество сложения:

combPre[“q\(pick)] = (p1Pre[“q\(pick)”] ?? 0) + (p2Pre[“q\(pick)”] ?? 0)

Если вы 100% уверены, что ключ будет существовать, вы можете рассмотреть возможность его принудительного развертывания:

combPre[“q\(pick)] = p1Pre[“q\(pick)”]! + p2Pre[“q\(pick)”]!

Делайте это только в том случае, если вы 100% уверены, как, например, «если ключей не существует, то должно случиться что-то действительно плохое» в такой ситуации.

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