Swift Словарь внутри значения доступа и изменения (словарь с массивом) - PullRequest
0 голосов
/ 11 мая 2019

Мой тип данных - словарь, внутри которого находится массив.= Я не могу получить доступ и изменить значение.

Я пытался что-то изменить (т. Е. Необязательное связывание (let), функция get,!? И т. Д.)

let roadMap = [
    "home": ["hair": 5, "super": 10, "academy": 9],
    "hair": ["home": 5, "super": 3, "bank": 11],
    "superMarket":["hairShop":3, "home":10, "englishAcademy":7, "restourant":3],
    "englishAcademy": ["home":9, "superMarket":7, "school":12],
    "restourant" :      ["superMarket":3, "bank":4],
    "bank" :            ["hairShop":11, "restourant":4, "englishAcademy":7, "school":2],
    "school" :          ["bank":2, "englishAcademy":12]]

var fastWay: [String: [Any]] = [:]
    for i in roadMap.keys{
    fastWay.updateValue([0, 9999, "start"], forKey: i)}

var nextPlace = "noWay"
var min = 8888

for i in fastWay.keys {
    if fastWay[i][0] == 0 {
        fastWay[i][0] = min }}

print (fastWay)

Комментарии игровой площадки Xcode: Значениенеобязательного типа '[Any]?'должен быть развернут, чтобы ссылаться на член 'индекс' обернутого базового типа '[Any]'

1 Ответ

0 голосов
/ 11 мая 2019

Ошибка ясна: компилятор не знает, есть ли в словаре значение для ключа i.

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

Но есть и другая ошибка:

Двоичный оператор '==' нельзя применить к операндам типа 'Any?'и 'Int'

Эта ошибка также очевидна: для сравнения значения Any? с Int необходимо его условно уменьшить.

for i in fastWay.keys {
    if fastWay[i]![0] as? Int == 0 {
        fastWay[i]![0] = min
    }
}

Если не гарантируется наличие значения для ключа, вы должны использовать необязательную цепочку, чтобы осчастливить (себя и) компилятор, например

if fastWay["foo"]?[0] as? Int == 0 { ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...