gpt4 book ai didi

swift - 子枚举 rawValue

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:19 25 4
gpt4 key购买 nike

考虑以下代码,我在其中声明了一个带有子枚举的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com