如何将嵌套枚举作为关联值传递但隐藏嵌套枚举的初始化?
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
来创建网络路由器。我该如何构建它,以便唯一暴露的项目是buildURL
、get(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
。
【讨论】:
以上是关于如何将嵌套枚举作为关联值传递但隐藏嵌套枚举的初始化?的主要内容,如果未能解决你的问题,请参考以下文章