如何将嵌套枚举作为关联值传递但隐藏嵌套枚举的初始化?

Posted

技术标签:

【中文标题】如何将嵌套枚举作为关联值传递但隐藏嵌套枚举的初始化?【英文标题】:How can I pass a nested enum as an associated value but hide the nested enum's initialization? 【发布时间】:2018-12-27 17:57:03 【问题描述】:

我正在尝试使用一些嵌套的enums 来创建网络路由器。我该如何构建它,以便唯一暴露的项目是buildURLget(sort..)search(query..)。换句话说,我不希望SortType(第四个选项)出现在这里。 。

例如,我可以调用这个,我不想这样做:let router = Food2ForkRouter.SortType.init(rawValue: "r")

从技术上讲,我可以在 enum 之外声明 SortType,但这样的逻辑就不那么包含了,它真的只有在这里才有意义。如果我将enum 标记为private,则会出现编译器错误,因为我不能将其用作associated value

这是我的代码,你可以直接将它插入 Playground:

enum Food2ForkRouter  
case search(query: String)
case get(sort: SortType) // <--- I want to be able to pass a SortType enum here

enum SortType : String 
    case rating = "r"
    case trendingness = "t"


var parameters : [String : String] 
    switch self 
    case .search(let query):
        return ["q" : query]
    case .get(let sort):
        return ["sort" : sort.rawValue]
    


func buildURL() -> URL? 
    /*......*/
    return nil


【问题讨论】:

【参考方案1】:

枚举没有构造函数,因此您无法将其更改为 fileprivate

【讨论】:

以上是关于如何将嵌套枚举作为关联值传递但隐藏嵌套枚举的初始化?的主要内容,如果未能解决你的问题,请参考以下文章

通过泛型类中嵌套枚举的反射获取枚举值

如何将枚举与分组和子分组层次结构/嵌套一起使用

如何将枚举案例传递给使用“if case”检查属性案例的函数

python3,使用枚举保持索引的嵌套列表中的最小值

嵌套字典:按日期分组,然后按枚举值分组并汇总计数

如何在 GraphQL 模式中定义嵌套枚举类型