我有一个非常简单的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]
我错过了什么?
阿南德
答案 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编程指南中