我看到了这个答案How to enumerate an enum with String type?
现在我尝试创建将返回字符串数组的方法 使用枚举的原始值。
所以我做了:
class func enumValues<T>(from array: AnyIterator<T>) -> [T] where T:RawRepresentable, T:Hashable {
var tempArray = [T]()
for item in array{
tempArray.append(item.rawValue)
}
return tempArray
}
但是,我收到了这个错误:
参数类型&#39; T.RawValue&#39;不符合预期的类型 &#39;可哈希&#39;
参数类型&#39; T.RawValue&#39;不符合预期的类型 &#39; RawRepresentable&#39;
我该如何解决这个问题? 感谢
答案 0 :(得分:1)
您想要返回一个包含数组元素原始值的数组,
所以返回类型应该是T.RawValue
(和约束
不需要T:Hashable
):
func enumValues<T>(from array: AnyIterator<T>) -> [T.RawValue] where T: RawRepresentable {
var tempArray: [T.RawValue] = []
for item in array{
tempArray.append(item.rawValue)
}
return tempArray
}
可以简化为
func enumValues<T>(from array: AnyIterator<T>) -> [T.RawValue] where T: RawRepresentable {
return array.map { $0.rawValue }
}
或更一般地说,对于任何可原始表示的序列:
func enumValues<S: Sequence>(from sequence: S) -> [S.Iterator.Element.RawValue]
where S.Iterator.Element: RawRepresentable {
return sequence.map { $0.rawValue }
}
另一方面,人们可能会问这是否值得一个单独的功能
完全可以,因为你可以直接拨打map { $0.rawValue }
给定迭代器/序列/数组。