【发布时间】:2019-07-09 11:26:09
【问题描述】:
我的问题是关于我在使用 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 恶作剧?
【问题讨论】:
-
您不能在
Swift中声明同名的方法和属性。当使用错误的约束调用方法/属性时,where子句将引发编译器错误,但该方法/属性将显示为任何类型的associated类型。 -
似乎是一个已知的错误:bugs.swift.org/browse/SR-8123.
-
谢谢@MartinR,我忘了检查那里,这似乎确实是一个已知的错误
标签: swift xcode dictionary generics