Swift ENUM如何将“ rawValue”转换回Enum大小写?

时间:2018-09-05 12:04:28

标签: swift enums

我有一个枚举:

  enum  switch : String {
      case on = "powerOn"
      case off = "powerOff"
      var japanswitch : String {
          case .on : return "onpu"
          case .off : return "offu"
      }
  }

在我的代码中,我的函数将“ powerOn”作为纯字符串参数传递了下来。问题是我的功能需要将“ powerOn”翻译为japanswitch。

但是问题是,现在的“ powerOn”只不过是一个纯粹的String,而它与JapanSwitch根本没有任何关系。

如何将“ powerOn”翻译为japanswitch?理想的结果应该是“ onpu”。

6 个答案:

答案 0 :(得分:2)

首先,您需要修复代码以便编译:

enum  Switch : String {
    case on = "powerOn"
    case off = "powerOff"
    var japanswitch : String {
        switch self {
        case .on : return "onpu"
        case .off : return "offu"
        }
    }
}

然后,您可以使用之后实现自己的目标:

let japanese = Switch(rawValue:"powerOn")?.japanswitch

请注意,japanese是可选的;您需要决定如何处理无效的原始值。

答案 1 :(得分:1)

关键字“ switch”不能用作标识符,因此您需要添加其他关键字,如下所示:

      enum  SwitchType : String {
            case on = "powerOn"
            case off = "powerOff"
            var japanswitch : String {
                switch self {
                case .on : return "onpu"
                case .off : return "offu"
                }
            }
        }

答案 2 :(得分:0)

您的问题不是很清楚,如果您向我们展示要使用此枚举尝试运行的代码,这会有所帮助,但我认为您可以执行以下操作:

import Foundation 

enum SwitchType: String {
    case on = "powerOn"
    case off = "powerOff"

    var japaneseRepresentation : String {
        switch (self){
            case Toggle.on : return "onpu"
            case Toggle.off : return "offu"
            default: return Toggle.on.japaneseRepresentation
        }
    }

    init(japanString japanString: String) {
        switch(japanString) {
            case "onpu": self = Toggle.on
            case "offu": self = Toggle.off
            default: self = Toggle.on
        }
    }

}

let a = Toggle(rawValue: "powerOn")
print(a)
let b = Toggle(japanString: "onpu")
print(b)
print(a == b)

这样做的好处是,您可以使用自定义的初始化程序来使用相同的枚举,但可以通过日语字符串对其进行初始化。

答案 3 :(得分:0)

enum Switch : String {
case on = "powerOn"
case off = "powerOff"

var japanswitch : String {
    switch self {
    case .on:
        return "onpu"
    case .off:
        return "offu"
    }
}}

没有switch语句就不能使用案例。因此可以尝试上面的代码段。在按上述方法定义枚举后,根据Apple官方文档,您可以按以下方式将字符串值转换为枚举。

  

如果您使用原始值类型定义枚举,则该枚举   自动接收带有原始值的初始化程序   值的类型(作为名为rawValue的参数),并返回   枚举大小写或为零。您可以使用此初始化程序尝试创建   一个新的枚举实例。

此示例从japanswitch的原始值Switch中识别出"powerOn"

let japanswitchValue = Switch(rawValue: "powerOn")?.japanswitch

答案 4 :(得分:0)

完全不同的解决方案,如果仅使用枚举进行翻译,则可以用字典替换它

let japaneseTranslation = ["powerOn": "onpu", "powerOff": "offu"]
...
let offJapanese = japaneseTranslation["powerOff"]

答案 5 :(得分:0)

尝试这个

enum  ABC : String {
      case on = "powerOn"
      case off = "powerOff"
      var japanswitch : String {
       return self == .on ? "onpu" : "offu"
      }
  }

  var a = ABC(rawValue: "powerOn")
  print(a!.japanswitch)