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

时间:2018-07-19 14:30:35

标签: swift enums access-modifiers associated-types

我正在尝试使用一些嵌套的enums创建网络路由器。我如何构建它,以便仅显示buildURLget(sort..)search(query..)。换句话说,我不希望SortType(第4个选项)出现在这里。 This is what the compiler shows

作为一个例子,我可以调用它,而我不想这样做:let router = Food2ForkRouter.SortType.init(rawValue: "r")

从技术上讲,我可以在SortType之外声明enum,但是这样逻辑就少了,它在这里才有意义。如果我将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 个答案:

答案 0 :(得分:0)

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