Swift-使用枚举映射UISegmentedControl
使用代表秒60、30和15的三位分段控件。枚举的代码:Swift-使用枚举映射UISegmentedControl,swift,enums,Swift,Enums,使用代表秒60、30和15的三位分段控件。枚举的代码: enum RefreshRate: Int { case sixty = 0 case thirty case fifteen func refreshEvery() -> Double { switch self { case .sixty: return 3600.0 case .thirty: return 1800.0
enum RefreshRate: Int {
case sixty = 0
case thirty
case fifteen
func refreshEvery() -> Double {
switch self {
case .sixty: return 3600.0
case .thirty: return 1800.0
case .fifteen: return 900.0
}
}
}
用法如下:
let defaultValue = UserDefaults.standard.integer(forKey: "refreshRate")
let refreshInterval = RefreshRate(rawValue: defaultValue)?.refreshEvery()
效果很好
在枚举的第一种情况下,是否有一种更“快速”的方法来获取整数60,而无需使用函数或switch语句?您可以使用computed属性来返回refreshEvery
的值:
enum RefreshRate: Int {
case sixty = 0
case thirty
case fifteen
var refreshEvery: Double {
return 60 * [60, 30, 15][self.rawValue]
}
}
let rate = RefreshRate.sixty
print(rate.rawValue) // 0
print(rate.refreshEvery) // 3600.0
顺便说一句-这个问题与UISegmentedController有什么关系?尽管这不是你要问的问题:
refreshEvery
更快捷的方法是:var refreshInterval:Double{…}
@rmaddy,以防有人想要存储分段控件的索引。你的答案提供了一个很好的选择。你的问题绝对没有提到你的枚举被用来表示分段控件的索引。这将是有用的信息。您的问题显示它仅用于确定与枚举大小写关联的秒数。@rmaddy这就是为什么枚举的第一行是case sixty=0
。这将使三十=1和十五=2。这看起来像是一个中间的解决方案。更简单,但仍然必须使用属性。我正在查看case sixty=60
,将原始值存储在用户默认值中,并使用UserDefaults.standard.integer(forKey:“refreshRate”)
检索原始值。然后,您将如何将其映射到分段控制索引?这就是我的想法将失败的地方-您的答案是有效的。