【问题标题】:Trying to work with an enum that has duplicate values in Swift尝试使用在 Swift 中具有重复值的枚举
【发布时间】:2016-10-04 18:48:01
【问题描述】:

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

class MyClass {

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

我在上面的构造中使用静态变量的原因是因为“blahD”和“blahE”都需要引用相同的字符串值,在不同的地方使用(不要问我为什么,它只需要就这样)。但是,我有一个方法需要传入枚举的值,如下所示:

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

不幸的是,我收到以下编译错误:

无法将“String”类型的值转换为预期的参数类型“MyClass.MyEnum”。

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

【问题讨论】:

    标签: ios swift string enums


    【解决方案1】:

    如果你让额外的大小写直接引用另一个枚举大小写而不是仅仅为它们分配相同的字符串值,你可以这样做:

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

    然后你可以像传递MyEnum.blahD一样传递MyEnum.blahE

    【讨论】:

      【解决方案2】:

      如果函数采用MyEnum 类型的值,则不能这样做。类型属性blahDblahE 根本不是那种类型。只有枚举的cases 是MyEnum 类型。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 1970-01-01
        • 2014-09-19
        • 2019-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多