尝试使用在Swift中具有重复值的枚举

时间:2016-10-04 18:48:02

标签: ios swift string enums

我有一个String类型的枚举,需要有多个具有相同值的变量。我的枚举看起来像这样:

class MyClass {

  enum MyEnum: String {
    case blahA = "blaha"
    case blahB = "blahb"
    ...
    static var blahD = "blah"
    static var blahE = "blah"
  }
}

我在上述结构中使用静态var的原因是因为" blahD"和" blahE"需要引用相同的String值,在不同的地方使用(不要问我为什么,它只需要这样)。但是,我有一个方法,我需要传递枚举的值,如下所示:

if let testString = myString(foo: MyEnum.blahD) {...} 

我很遗憾收到以下编译错误:

  

无法转换类型"字符串"的值预期参数类型" MyClass.MyEnum"。

如何绕过传递上述变量,该变量在我的方法中的枚举中具有重复值,但是将其转换为" MyClass.MyEnum"?

的类型

2 个答案:

答案 0 :(得分:2)

如果您将额外的案例引用直接引用另一个枚举案例而不是仅仅为它们分配相同的字符串值,则可以执行此操作:

class MyClass {

  enum MyEnum: String {
    case blahA = "blaha"
    case blahB = "blahb"
    ...
    case blahD = "blah"
    static var blahE = MyEnum.blahD
  }
}

然后您可以像传递MyEnum.blahE

一样传递MyEnum.blahD

答案 1 :(得分:1)

如果函数采用MyEnum类型的值,则无法执行此操作。类型属性blahDblahE根本不属于该类型。只有枚举的case类型为MyEnum

函数参数的类型必须更改为String

唯一的另一种方法是在枚举中添加一个案例,其原始值与这两个属性的值相匹配:case blahDOrE = "blah"。然后你可以构建那个案例:MyEnum(rawValue: MyEnum.blahD),但我看不出它非常有用。