根据用户默认值

时间:2017-03-04 14:04:04

标签: ios swift

我正在尝试根据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
}

这种类型的最佳方法是什么?我应该声明一些全局变量吗?

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,这不会很困难。

希望它有助于解决您的问题。 :)

相关问题