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 字典内的值访问和更改(涉及数组的字典)的主要内容,如果未能解决你的问题,请参考以下文章
Swift4.2~数组和字典(Array, Dictionary)基本类型转换