gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:05:20 25 4
gpt4 key购买 nike

我有以下枚举:

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/

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