有没有办法让函数接受任何具有String的rawValue的枚举类型?

时间:2015-10-05 10:40:07

标签: swift enums protocols

我提出的一种方法是制定一个其他Enum必须符合的协议。

protocol StringRepresentable
{
    var rawValue: String { get }
}

struct Endpoint
{
    enum User: String, StringRepresentable
    {
        case Login = "/user/login"
        case Register = "/user/register"
    }

    enum Item: String, StringRepresentable
    {
        case Like = "/item/like"
        case Buy = "/item/buy"
    }
}

func urlString(endpoint: StringRepresentable) -> String
{
    return "http://www.example.com\(endpoint.rawValue)"
}

let userLoginEndpoint = urlString(Endpoint.User.Login)
let buyItemEndpoint = urlString(Endpoint.Item.Buy)

还有其他比这更好的方法吗?

或者是否有一个协议,已经提供了这样的东西,我错过了?

1 个答案:

答案 0 :(得分:4)

已经有RawRepresentable协议可以满足您的需求。

您可以根据RawValue == String

进行扩展