Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-使用枚举映射UISegmentedControl_Swift_Enums - Fatal编程技术网

Swift-使用枚举映射UISegmentedControl

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

使用代表秒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
        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”)
检索原始值。然后,您将如何将其映射到分段控制索引?这就是我的想法将失败的地方-您的答案是有效的。