我有一个枚举:
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”。
答案 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)