更新简单的可变字典时Swift错误

时间:2014-07-30 19:40:05

标签: swift

我有一个非常简单的Swift代码:

var dictionary = ["cat" : 2, "dog" : 4, "snake" : 8]
dictionary["lion"] = 7
dictionary += ["bear" : 1, "mouse" : 6] 

Swift编译器抱怨:

play12.swift:69:1:错误:' [String:Int]'与' UInt8'不同 字典+ = ["熊" :1,"鼠标" :6]

我错过了什么?

阿南德

2 个答案:

答案 0 :(得分:1)

目前无法使用运算符更新字典,我认为也不会。当你考虑数组和哈希表之间的差异时,能够附加到数组是有意义的,因为数组是累积的和顺序的。

表达式:myArray += value很直观。您可以看一下“我通过添加这些值来增加此数组的索引”。它也与先前的添加不冲突,因为每个新添加都被赋予唯一索引。

myDict += [key : value]不太直观,可能会发生一些无意的事情。例如,如果该密钥已存在,我们该怎么办?如果密钥是唯一的但是hashValue存在怎么办?该操作不再明显只是“将此项目附加到我的收藏中”它现在变为“尝试附加此项目并自行解决任何冲突”。

总而言之,如果你想要自己实现它的功能,这应该会给你你想要的功能。请记住,任何冲突的密钥都将被覆盖

@infix func += <T:Hashable, U:Any>(inout lhs:[T:U], rhs:[T:U]){
    for (key,value) in rhs{
        lhs[key] = value;
    }
}

答案 1 :(得分:0)

苹果加入字典的例子:

​airports​[​"LHR"​] = ​"London"

dictionary["key"] = value 

下面的表单只适用于数组,但是数组会有不同的形式,因为它们没有键:所以它不会真正用于任何事情。

dictionary += ["bear" : 1, "mouse" : 6] 

第17页,在ibooks上的swift编程指南中