如下定义的枚举。
enum PurchaseTimeType: Int,CaseIterable {
case ASAP, ThisMonth, NextMonth
func id() -> Int {
switch self {
case .ASAP:
return 1
case .ThisMonth:
return 2
case .NextMonth:
return 3
}
}
func title() -> String {
switch self {
case .ASAP:
return "ASAP"
case .ThisMonth:
return "This Month"
case .NextMonth:
return "Next Month"
}
}
}
我将id
存储在一个变量中
var id = 1
我想从其中title
中获得id
。我将如何获得title
中的id
,什么是最好的方法?
为此寻求最佳的专业解决方案。
谢谢
答案 0 :(得分:1)
您为每种情况分配Int
ID,如下所示:
enum PurchaseTimeType: Int, CaseIterable {
case asap = 1
case thisMonth = 2
case nextMonth = 3
// All above cases can also be written in one line, like so
// case asap = 1, thisMonth, nextMonth
var id: Int {
return self.rawValue
}
var title: String {
switch self {
case .asap:
return "ASAP"
case .thisMonth:
return "This Month"
case .nextMonth:
return "Next Month"
}
}
}
用法1
let purchaseTime: PurchaseTimeType = .thisMonth
print(purchaseTime.id, ":", purchaseTime.title)
用法2 :按ID过滤
let id = 1
if let type = PurchaseTimeType.allCases.first(where: { $0.id == id } ) {
print("Title for \(id) is \(type.title)")
}
注意我从大写更新了案例名称,以遵循惯例,每个案例都应命名为 lowerCamelCase ,并使用小写的首字母和大写字母随后的每个单词。
答案 1 :(得分:1)
您可以按以下方式使用
int()
希望它对您有用
答案 2 :(得分:0)
您需要添加一个具有以下ID的自定义init
enum PurchaseTimeType: Int,CaseIterable {
case ASAP, ThisMonth, NextMonth
func id() -> Int {
switch self {
case .ASAP:
return 1
case .ThisMonth:
return 2
case .NextMonth:
return 3
}
}
func title() -> String {
switch self {
case .ASAP:
return "ASAP"
case .ThisMonth:
return "This Month"
case .NextMonth:
return "Next Month"
}
}
init?(id: Int) {
switch id {
case 1:
self = .ASAP
case 2:
self = .ThisMonth
case 3:
self = .NextMonth
default:
return nil
}
}
}
并且您可以使用Int初始化PurchaseTimeType实例。然后您可以按以下方式获得其标题
let num = 1
if let purchaseTimeType = PurchaseTimeType(id:num) {
print(purchaseTimeType.title())//ASAP
print(purchaseTimeType.id())//1
}