【发布时间】:2019-06-17 22:46:59
【问题描述】:
考虑下面的代码,我在其中声明了一个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 枚举。
我想要实现的目标:也许你可以通过命名来联系,我正在尝试包装我的本地化密钥,所以我可以根据密钥类型等轻松访问它们,以及 @引用实际密钥的 987654328@ 将进入 getLocalizedValue 函数。
Playground 输出:使用上面的函数 Playground 输出是
消息(__lldb_expr_21.LocalizeKey.Messages.failure)
编辑:无需创建一个在每种情况下都切换 self 的变量,想象一下如果我们有 +400 键,那可能会是一团糟。
【问题讨论】:
-
如果我理解正确,您希望能够在
keyString函数中访问Buttons和Messages的原始字符串值吗? -
是的,因为
LocalizeKey让我们称其为基本枚举包含键的类型