首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从RawRepresentable获取AnyIterator的泛型数组

从RawRepresentable获取AnyIterator的泛型数组
EN

Stack Overflow用户
提问于 2017-07-12 11:20:40
回答 2查看 421关注 0票数 0

我看到了这个答案,How to enumerate an enum with String type?

现在,我正在尝试创建一个方法,该方法将返回带有枚举的原始值的字符串数组。

所以我做了:

代码语言:javascript
复制
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’

我怎样才能解决这个问题?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-12 13:15:58

您希望返回一个数组,其中包含数组元素的原始值,因此返回类型应该是T.RawValue (不需要约束T:Hashable ):

代码语言:javascript
复制
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
}

可以简化为

代码语言:javascript
复制
func enumValues<T>(from array: AnyIterator<T>) -> [T.RawValue] where T: RawRepresentable {
    return array.map { $0.rawValue }
}

或者更广泛地说,对于任意序列的原始代表:

代码语言:javascript
复制
func enumValues<S: Sequence>(from sequence: S) -> [S.Iterator.Element.RawValue]
    where S.Iterator.Element: RawRepresentable {

    return sequence.map { $0.rawValue }
}

另一方面,人们可能会问这是否值得使用单独的函数,因为您可以在给定的迭代器/序列/数组上直接调用map { $0.rawValue }

票数 1
EN

Stack Overflow用户

发布于 2021-10-30 20:51:01

要用枚举的原始值返回字符串数组,只需遵守CaseIterable

代码语言:javascript
复制
enum WeekDay: String, CaseIterable {
    case monday, tuesday, wednesday, thursday, friday
}

let arrayOfRawValues = WeekDay.allCases.map(\.rawValue)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45056263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档