我正在尝试根据UISegmentedController
启用UserDefaults
索引。但我的问题是,如果函数返回true,我不知道如何启用索引。
我有一个主视图控制器,它有segmentedController
。
假设我有4个索引。 0已启用,1,2,3,4已禁用。现在,如果得分为>= value
,我想启用索引1。
我知道我可以这样启用和禁用segmentAt:segmentedControl.setEnabled(true, forSegmentAt: 1) // can also be false
但是如何在函数中实现它。
这就是我想要做的事情:
class func checkIfEligibleForNextDifficulty(key: String, score: Int) -> Bool{
let userDefaults = UserDefaults.standard
if userDefaults.integer(forKey: key) >= score{
return true
}
return false
}
我正在使用它:
if Util.checkIfEligibleForNextDifficulty(key: "diff2", score: 8){
//Here I want to enable the index 1
}
这种类型的最佳方法是什么?我应该声明一些全局变量吗?
答案 0 :(得分:1)
您可以对Level
这样的概念进行建模,并且可以从score
创建一个等级。因此,当您使用分数初始化Level
时,您将自动推断该级别。
然后,鉴于Level将是一个int enum,它将帮助您将其与分段控件的索引相匹配。
要根据分数启用级别,您可以创建如下的函数。
enum Level: Int {
case beginner
case medium
case advanced
case expert
}
//MARK: Score & Enabling levels
extension Level {
init(score: Int) {
switch score {
case 1..<8: self = .beginner
case 8..<20: self = .medium
case 20..<100: self = .advanced
case 100..<Int.max: self = .expert
default: self = .beginner
}
}
func enabledLevels() -> [Level] {
switch self {
case .beginner: return [.beginner]
case .medium: return [.beginner, .medium]
case .advanced: return [.beginner, .medium, .advanced]
case .expert: return [.beginner, .medium, .advanced, .expert]
}
}
}
作为一项练习,尝试调整我的解决方案以添加UserDefaults,这不会很困难。
希望它有助于解决您的问题。 :)