Swift字典内部的值访问和更改(涉及数组的字典)

时间:2019-05-11 14:40:47

标签: swift

我的数据类型是字典,里面的值是数组。 = 我无法访问和更改值。

我试图更改某些内容(例如,可选的绑定(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 :(得分:0)

错误很明显:编译器不知道字典中的键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 { ...