我的问题是关于使用Swift处理泛型类型时遇到的一些编译器错误。
因此,在此刻,我正在尝试通过添加静态变量和函数来扩展Dictionary
与where
子句的问题。
请参见下面的示例:
extension Dictionary where Key == String, Value == String {
static func foo() -> [String: String] {
return [
"bar": "bar",
"baz": "baz"
]
}
}
当我以不同的通用一致性再次扩展Dictionary
时,就会出现问题:
extension Dictionary where Key == String, Value == Int {
static let foo: [String: Int] = [
"bar": 0,
"baz": 1
]
}
请注意,Value
从String
更改为Int
,第二个扩展名中的foo
被声明为let
。
现在,这将显示以下编译器错误:
Invalid redeclaration of 'foo'
但是,如果我将foo
的两个实现都更改为静态函数,或者将两者都更改为静态let
或var
,则可以正常编译。
我缺少某种Swift恶作剧吗?
答案 0 :(得分:2)
但是,如果扩展定义了与另一个扩展中定义的变量同名的函数,则编译器将引发无效的重新声明错误。
和
我认为我们应该将其合法化–当前,无论通用环境如何,如果变量的重载签名发生冲突,我们始终在考虑变量与非变量(以及具有非函数的函数)之间的冲突。但是,如果通用环境不同,则IMO允许允许过载是合理的。