2015-10-05 2 views
2

Один из способов, с помощью которого я пришел, - сделать протокол, который должен соответствовать другому Enum.Есть ли способ сделать функцию для принятия любых типов Enum, у которых есть rawValue String?

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) 

Есть ли другой способ, который лучше этого?

Или есть протокол, уже предоставленный что-то вроде этого, что я пропустил?

ответ

3

Существует уже протокол RawRepresentable, который делает то, что вы хотите.

И вы можете расширить в зависимости от того RawValue == String

+0

На первый, я не совсем понимаю ваш ответ, но я только что посмотрел в него и придумал что-то вроде этого Func (конечная точка: T) -> String Это вы имеете в виду? – myLifeasdog

+0

Что-то в этом роде. – Abizern