Как создать enum, который принимает параметр? - PullRequest
0 голосов
/ 09 июня 2018

Это мое перечисление

enum urlLink: String {
   case linkOne = "http://test.com/linkOne"
}

, и оно хорошо работает в большинстве моих случаев.Однако теперь я хочу создать еще одну ссылку, которая будет принимать параметры, и выглядит так:

"http://test.com/:params/info"

. Есть ли способ добавить строковый параметр в один из моих перечислений, чтобы у меня было что-то вродеэто по ссылке два

enum urlLink: String {
   case linkOne = "http://test.com/linkOne"
   case linkTwo(input: String) = "http://test.com/" + input + "info"
}

Спасибо большое!

1 Ответ

0 голосов
/ 09 июня 2018

Вы не можете добавлять необработанные значения в перечисления со связанными значениями.Однако вы можете добавить свойства и методы к вашему перечислению, чтобы вы могли сделать что-то вроде этого:

enum urlLink: CustomStringConvertible {
    case linkOne
    case linkTwo(input: String)

    var description: String {
        switch self {
        case .linkOne:
            return "http://test.com/linkOne"
        case .linkTwo(let input):
            return "http://test.com/\(input)info"
        }
    }
}

Вы также можете соответствовать RawRepresentable:

enum urlLink: RawRepresentable {
    case linkOne
    case linkTwo(input: String)

    var rawValue: String {
        switch self {
        case .linkOne:
            return "http://test.com/linkOne"
        case .linkTwo(let input):
            return "http://test.com/\(input)info"
        }
    }

    init?(rawValue: String) {
        if rawValue == "http://test.com/linkOne" {
            self = .linkOne
            return
        } else {
            self = // some regex logic to get the "input" part
            return
        }
        return nil
    }

    typealias RawValue = String
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...