Swift ENUM 如何将“rawValue”转换回 Enum 大小写?
Posted
技术标签:
【中文标题】Swift ENUM 如何将“rawValue”转换回 Enum 大小写?【英文标题】:Swift ENUM how to convert "rawValue" back to Enum case? 【发布时间】:2018-09-05 12:04:27 【问题描述】:我有一个枚举:
enum switch : String
case on = "powerOn"
case off = "powerOff"
var japanswitch : String
case .on : return "onpu"
case .off : return "offu"
在我的代码中,我的函数将“powerOn”作为纯字符串参数传递。问题是我的某些功能需要将“powerOn”转换为 japanswitch。
但问题是“powerOn”现在只不过是一个与 japanswitch 根本没有关系的字符串。
如何将“powerOn”翻译成japanswitch?期望的结果应该是“onpu”。
【问题讨论】:
【参考方案1】:首先你需要修复你的代码以便它编译:
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
将是可选的;您需要决定如何处理无效的原始值。
【讨论】:
【参考方案2】:关键字'switch'不能用作标识符,因此您需要添加一些其他关键字,如下所示:
enum SwitchType : String
case on = "powerOn"
case off = "powerOff"
var japanswitch : String
switch self
case .on : return "onpu"
case .off : return "offu"
【讨论】:
【参考方案3】:试试这个
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)
【讨论】:
【参考方案4】:您的问题不是很清楚,如果您向我们展示您尝试使用此枚举运行的代码会有所帮助,但我认为您可以这样做:
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)
这样做的好处是您可以使用自定义初始化程序来使用相同的枚举,但可以从日语字符串初始化它。
【讨论】:
【参考方案5】:enum Switch : String
case on = "powerOn"
case off = "powerOff"
var japanswitch : String
switch self
case .on:
return "onpu"
case .off:
return "offu"
你不能使用没有 switch 语句的 case。所以可以试试上面的sn -p。如上所述定义枚举后,根据Apple官方文档,您可以将字符串值转换为枚举,如下所示。
如果您使用原始值类型定义枚举,则该枚举 自动接收一个初始化器,它采用原始值 值的类型(作为一个名为 rawValue 的参数)并返回 枚举 case 或 nil。您可以使用此初始化程序尝试创建 枚举的新实例。
此示例从Switch
的原始值"powerOn"
中识别japanswitch
:
let japanswitchValue = Switch(rawValue: "powerOn")?.japanswitch
【讨论】:
【参考方案6】:完全不同的解决方案,如果您只是使用枚举进行翻译,那么您可以将其替换为字典
let japaneseTranslation = ["powerOn": "onpu", "powerOff": "offu"]
...
let offJapanese = japaneseTranslation["powerOff"]
【讨论】:
以上是关于Swift ENUM 如何将“rawValue”转换回 Enum 大小写?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ObjectMapper 将枚举的 rawValue 分配给变量?
从匹配类型的字符串中获取 Swift 枚举类型,而不是 rawValue