ios - Swift-如何从ENUM中获得原始值(value)

标签 ios swift enums

我有以下枚举:

enum MembershipLevel: Int {
    
    case basic = 25
    case bronze = 50
    case silver = 100
    case gold = 500
    case platinum = 1000
    
}
然后,我有以下firebase查找:
userRef.child(userId).child("memeberlevel").observeSingleEvent(of: .value, with: { (snapshot) in

    self.userRef.child(userId).child("count").observeSingleEvent(of: .value, with: { (snap) in
                
        if((snap.value!) < MembershipLevel.(snapshot.value!).rawValue) {
                    
            completion(false)
                    
        } else {

            completion(true)

        }
                
    })

})
上面的代码由于以下代码而引发编译器错误:
MembershipLevel.(snapshot.value).rawValue
由于代码段MembershipLevel.basic.rawValue完全可以,我如何动态引用枚举值?

最佳答案

您不应在此处使用枚举。枚举案例不能动态引用。
虽然您可以执行以下操作:

enum MembershipLevel: Int, CaseIterable {
    
    case basic = 25
    case bronze = 50
    case silver = 100
    case gold = 500
    case platinum = 1000
    
    init?(string: String) {
        if let value = MembershipLevel.allCases.first(where: { "\($0)" == string }) {
            self = value
        } else {
            return nil
        }
    }
}

// usage:
let userValue = snapValue.value as! Int
let membershipString = snapshot.value as! String
if userValue < MembershipLevel(string: membershipString)!.rawValue {
    
}
将来可能会中断,因为我认为不能保证产生枚举用例名称的"\($0)"
我会用字典:
let membershipLevelNameDict = [
    "basic": 25,
    "bronze": 50,
    "silver": 100,
    "gold": 500,
    "platinum": 1000
]
用法:
let userValue = snapValue.value as! Int
let membershipString = snapshot.value as! String
if userValue < membershipLevelNameDict[membershipString] ?? 0 {

}
使用此字典,您还可以创建枚举的实例:
membershipLevelNameDict[membershipString].flatMap(MembershipLevel.init(rawValue:))
但是,如果您想比较原始值,则像第一个代码片段一样直接访问字典。

关于ios - Swift-如何从ENUM中获得原始值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62725031/

相关文章:

ios - 如何在 GLSL ES 中编写 const 数组

ios - 供应配置文件不包含在钥匙串(keychain)中安装匹配私钥的任何证书

ios - 如何将 JSON 中的值附加到数组?

swift - "Expression type ' Bool ' is ambiguous without more context"三元运算

ios - 如何在 Swift 的 CollectionView 中显示本地化的星期几? iOS

ios - 从 URL 获取数据时显示加载指示器的正确方法是什么

ios - addSubview 如何使用内部尺寸?

iOS Swift 第一个应用程序,控件不出现

c# - LINQ TO ENTITY 无法与枚举类型进行比较

typescript - 将枚举转换为自定义文字数组