swift - 有没有办法让函数接受任何具有 rawValue 字符串的枚举类型?

标签 swift enums protocols

我想到的一种方法是制定其他 Enum 必须遵守的协议(protocol)。

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)

还有比这更好的方法吗?

或者是否有一个协议(protocol),已经提供了类似的东西,但我错过了?

最佳答案

RawRepresentable 协议(protocol)已经有了,它可以满足您的需求。

并且您可以根据是否 RawValue == String 进行扩展

关于swift - 有没有办法让函数接受任何具有 rawValue 字符串的枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946576/

相关文章:

ios - 在不相关的 ViewController 之间传递数据

ios - 从单 View 应用程序 (objective-c) 调用以函数作为 Cocoa Touch Framework (swift) 参数的方法

objective-c - NSWindow +没有圆角的标题栏?

ios - 解析 + Swift + 匿名

c# - SWIG:将枚举包装到 C#

objective-c - 协议(protocol)中可选方法的意义何在?

java - 从另一个类访问枚举

java - 如何迭代具有自定义值的枚举?

python - Twisted : Same Service, 不同端口中的多个同时工厂和协议(protocol)

http - 一个端口可以监听两种不同的协议(protocol)吗?