我看到了这个答案,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
}但是,我知道这个错误:
参数类型'T.RawValue‘不符合预期类型'Hashable’ 参数类型'T.RawValue‘不符合预期类型'RawRepresentable’
我怎样才能解决这个问题?谢谢
发布于 2017-07-12 13:15:58
您希望返回一个数组,其中包含数组元素的原始值,因此返回类型应该是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 }。
发布于 2021-10-30 20:51:01
要用枚举的原始值返回字符串数组,只需遵守CaseIterable。
enum WeekDay: String, CaseIterable {
case monday, tuesday, wednesday, thursday, friday
}
let arrayOfRawValues = WeekDay.allCases.map(\.rawValue)https://stackoverflow.com/questions/45056263
复制相似问题