Попытка получить доступ/проверить ключ в словаре и добавить значения.

myDict["Algebra"] изначально возвращает nil. Почему "nil coalescing" здесь не работает?

var myDict = [String : [Int]]()
myDict["Algebra"]?.append(contentsOf: [98,78,83,92]) ?? myDict["Algebra"] = [98,78,83,92]

MikeMaus

Ответов: 2

Ответы (2)

При попытке использования как у вас выдает ошибку : Левая сторона мутирующего оператора имеет неизменяемый тип '[Int]?'

.

При заключении в круглые скобки не будет ошибки компиляции и все будет работать

var myDict = [String : [Int]]()
myDict["Algebra"]?.append(contentsOf: [98,78,83,92]) ?? (myDict["Algebra"] = [98,78,83,92])
print(myDict) // ["Algebra": [98, 78, 83, 92]]

Документация Swift здесь для инфиксных операторов.

Хотя это работает со скобками, проблема, которую вы пытаетесь решить, - это именно то, что делает подскрипт default, без злоупотребления оператором ?? в неявный оператор if с побочными эффектами:

myDict["Algebra", default: []].append(contentsOf: [98,78,83,92])

Вы также можете найти этот синтаксис немного более понятным:

myDict["Algebra", default: []] += [98,78,83,92]

2022 WebDevInsider