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

Posted

技术标签:

【中文标题】Swift 字典内的值访问和更改(涉及数组的字典)【英文标题】:Swift Dictionary inside value access and change (dictionary involving array) 【发布时间】:2019-05-11 14:40:46 【问题描述】:

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

我试图改变一些东西(即可选绑定(let)、获取函数、!?等)

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 游乐场 cmets: 可选类型 '[Any]?' 的值必须解包以引用已封装基类型“[Any]”的成员“下标”

【问题讨论】:

【参考方案1】:

错误很明显:编译器不知道字典中键 i 是否存在值。

在这种情况下——知道所有键都有值——你可以强制解开值。

但是还有一个错误:

二元运算符“==”不能应用于“任何?”类型的操作数和“诠释”

这个错误也很清楚:要将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  ...

【讨论】:

以上是关于Swift 字典内的值访问和更改(涉及数组的字典)的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中搜索字典数组的值

Swift4.2~数组和字典(Array, Dictionary)基本类型转换

Swift - 使用 swiftyJSON 根据字典中的值查找字典数组的索引

swift:安全访问 SCNNode 数组的字典

swift实现遍历嵌套字典并修改其中的值

swift实现遍历嵌套字典并修改其中的值