首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理泛型枚举(不能应用二元运算符'<‘)

如何处理泛型枚举(不能应用二元运算符'<‘)
EN

Stack Overflow用户
提问于 2021-02-25 13:44:04
回答 1查看 41关注 0票数 0

我想实现一个泛型结构来处理许多属性。这些属性中的每一个(质量、缺陷...)是枚举数组,两者都符合Options协议。当我声明OptionType符合Options协议,并因此声明为RawRepresentable时,我很难理解这个错误,更广泛地说,我很难理解如何管理泛型枚举类型。欢迎任何指导!

非常感谢,乔

代码语言:javascript
复制
struct Property {
    
    var options: [OptionType]
    var label: String {
        "\(OptionType.Type.self)"
    }
    var allSortedOptions: [OptionType] {
        let allOptions = OptionType.allCases as! [OptionType]
        return allOptions.sorted(by: {$0.rawValue < $1.rawValue})
        //Won't compile: Binary operator '<' cannot be applied to two 'OptionType.RawValue' operands
    }
}

protocol Options: CaseIterable, RawRepresentable {}
extension Options {}

enum OptionQualities: String, Options {
    case polite, handsome, smart, funny, enjoyable, articulated
}
enum OptionFlaws: String, Options {
    case lazy, chatty, oftenLate, dirty, agressive, complaining
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-25 14:03:31

你只需要添加一个约束到你的协议选项RawRepresentable RawValue to String:

代码语言:javascript
复制
protocol Options: CaseIterable, RawRepresentable where RawValue == String { }

或者,如果您可能有其他枚举类型,则可以简单地将RawValue限制为Martin R建议的类似协议

代码语言:javascript
复制
protocol Options: CaseIterable, RawRepresentable where RawValue: Comparable { }

请注意,不需要强制转换allCasesas! [OptionType]

代码语言:javascript
复制
var allSortedOptions: [OptionType] {
    OptionType.allCases.sorted(by: { $0.rawValue < $1.rawValue })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66363042

复制
相关文章

相似问题

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