作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
考虑以下代码,我在其中声明了一个带有子枚举的 enum
。
enum LocalizeKey {
case message(Messages)
case buttons(Buttons)
enum Buttons: String {
case remove = "Remove"
case add = "Add"
}
enum Messages: String {
case success = "Success"
case failure = "Failure"
}
}
在没有子枚举的普通 enum
中,我们可以轻松访问 .rawValue
属性并获取我们选择的任何情况的原始值。
对于这种情况,我创建了一个这样的函数来检查我得到了什么。
func keyString(for type: LocalizeKey) {
print(type)
}
keyString(for: .message(.failure)) // usage
问题:除了 .self
之外没有其他属性可以访问这个 LocalizeKey
枚举。
我想要实现的目标:也许你可以通过命名联系起来,我正在尝试包装我的本地化 key ,因此我可以根据 key 类型等轻松访问它们,以及 rawValue
即引用实际 key 将进入 getLocalizedValue
功能。
Playground 输出:使用 Playground 输出上方的函数是
message(__lldb_expr_21.LocalizeKey.Messages.failure)
编辑:无需创建一个变量来在每种情况下切换自身,想象一下如果我们有 +400 键,那可能会是一团糟。
最佳答案
您需要切换
type
参数并进行模式匹配:
switch type {
case .message(let messages): return messages.rawValue
case .buttons(let buttons): return buttons.rawValue
}
您还可以将其作为 LocalizeKey
的扩展:
extension LocalizeKey {
var keyString: String {
switch self {
case .message(let messages): return messages.rawValue
case .buttons(let buttons): return buttons.rawValue
}
}
}
关于swift - 子枚举 rawValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56618626/
我是一名优秀的程序员,十分优秀!