如何创建带参数的枚举?

时间:2018-06-09 17:12:42

标签: ios swift enums

这是我的枚举

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

它在我的大多数情况下运作良好。但是,我现在想要创建另一个带参数的链接,它看起来像这个

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

有没有办法可以将字符串参数添加到我的一个枚举案例中,这样我就可以为linkTwo添加类似的内容

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

非常感谢你!

1 个答案:

答案 0 :(得分:1)

您无法将原始值添加到具有关联值的枚举中。但是,您可以为枚举添加属性和方法,因此您可以执行以下操作:

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
}