我的数据类型是字典,里面的值是数组。 = 我无法访问和更改值。
我试图更改某些内容(例如,可选的绑定(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]”的成员“下标”
答案 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 { ...