【发布时间】:2017-07-19 18:37:40
【问题描述】:
我想使用下面的方法将两个字典与 += 运算符重载连接起来。
static func += <Key, Value> ( left: inout [Key : Value], right: [Key : Value]) {
for (key, value) in right {
left.updateValue(value, forKey: key)
}
}
或
static func +=<Key, Value>( left: inout Dictionary<Key ,Value>, right: Dictionary<Key, Value>) {
for (key, value) in right {
left.updateValue(value, forKey: key)
}
}
有了这个实现:
var properties = ["Key": "Value"]
var newProperties = ["NewKey": "NewValue"]
properties += newProperties
我从 xCode 得到以下错误,
无法将“[String: Any]”类型的值转换为预期的参数类型 'inout [_ : ]' (又名'inout'字典, _>)
它不起作用,任何人都可以帮助我,或者如果不可能,解释我为什么?
【问题讨论】:
-
请注意,您的代码如上所述编译没有问题。使用minimal reproducible example 创建一个新项目总是一个好主意,以避免不清楚的问题陈述。
-
@MartinR 从技术上讲,它不会在函数被声明为
static的情况下在顶层编译,但是是的 - OP,请始终提供 MCVE。通常我会推迟回答没有 MCVE 的问题,但我认为在这种情况下扩展假设并没有太大的飞跃(Martin 的时机也是令人毛骨悚然的 :))。 -
@Hamish:你说得对,我忘了我已经删除了“静态”。
标签: swift dictionary operator-overloading