我正在尝试找到一种向枚举添加“count”变量的方法,该变量允许量化个案数量。这很简单,当硬编码到每个枚举中时效果很好,但逻辑扩展是使其成为协议扩展...但我遇到了上述错误。
阅读其他帖子表明编译器没有足够的信息来实例化枚举。我尝试添加相关类型,但错误仍然存在。这只是我不得不放弃的事情吗?这不是很重要,但我想了解我做错了什么。
代码如下:
protocol CountableEnum: RawRepresentable {
static var count: Int { get }
}
extension CountableEnum {
static var count: Int {
var max = 0
while let _ = self(rawValue: max) { max += 1 }
return max
}
}
答案 0 :(得分:0)
您需要使用正确的Self
引用而不是self
,并将扩展名限制为只有RawValue
Int
的类型。
protocol CountableEnum: RawRepresentable {
static var count: Int { get }
}
extension CountableEnum where RawValue == Int {
static var count: Int {
var max = 0
while let _ = Self(rawValue: max) { max += 1 }
return max
}
}
答案 1 :(得分:0)
RawRepresentable
具有关联类型RawValue
,在您的示例中,它未指定它是Int
。如果您使用where
约束协议扩展,如下例所示,它应该可以正常工作。
protocol CountableEnum: RawRepresentable {
static var count: Int { get }
}
extension CountableEnum where RawValue == Int {
static var count: Int {
var max = 0
while let _ = self.init(rawValue: max) { max += 1 }
return max
}
}