如何从AnyObject转换UserDefault值? 到一个Int,所以我可以保存它

我试图学习如何使用UserDefaults,并不知道如何存储我需要存储的值之一。

我有这个枚举:

enum CalculationFormula: Int { case Epley case Brzychi case Lander case Lombardi case MayhewEtAl case OConnerEtAl } 

和这个类与一个名为'selectedFormula',我想能够存储为一个NSUserDefaults值的属性:

 class CalculatorBrain: NSObject { var weightLifted: Double var repetitions: Double var oneRepMax: Double? var selectedFormula = CalculationFormula.Epley init(weightLifted: Double, repetitions: Double) { self.weightLifted = weightLifted self.repetitions = repetitions let userDefaults = NSUserDefaults.standardUserDefaults() self.selectedFormula = userDefaults.objectForKey("selectedFormula") <-- error } 

self.selectedFormula行给我一个错误:

 'Cannot assign value of type 'AnyObject?' to type 'CalculationFormula' 

经过大量的search和阅读苹果文档,我学到了很多有关UserDefaults和AnyObject,但没有find答案。

我以为我试图把它当作一个Int来施放:

 self.selectedFormula = userDefaults.objectForKey("selectedFormula") as! Int // 'Cannot assign value of type 'Int' to type 'CalculationFormula' 

 self.selectedFormula = userDefaults.objectForKey("selectedFormula") as Int // 'Cannot convert value of type 'AnyObject?' to type 'Int' in coercion 

我知道偏好值需要是这些types之一(NSData,NSString,NSNumber,NSDate,NSArray,或NSDictionary),但我存储一个Int,所以我应该很好。

我只是坚持,真的很感激一些帮助。 谢谢,麻烦您了。

自从你的枚举

 enum CalculationFormula: Int { case Epley, Brzychi, Lander, Lombardi, MayhewEtAl, OConnerEtAl } 

extends Int可以使用它的rawValue 。 所以你可以读/保存一个IntNSUserDefaults

这是你如何保存一个公式

 func saveFormula(formula: CalculationFormula) { NSUserDefaults.standardUserDefaults().setInteger(formula.rawValue, forKey: "selectedFormula") } 

这就是你如何检索它

 func loadFormula() -> CalculationFormula? { guard NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.contains("selectedFormula") else { print("No value found") return nil } guard let retrievedFormula = CalculationFormula(rawValue: NSUserDefaults.standardUserDefaults().integerForKey("selectedFormula")) else { print("Wrong value found") return nil } return retrievedFormula } 

您必须使用rawValue初始化枚举:

 self.selectedFormula = CalculationFormula(rawValue: userDefaults.objectForKey("selectedFormula") as! Int) 

你应该保存你的价值:

 userDefaults.setInteger(yourValue, forKey: "yourKey") 

将您的值加载为:

 userDefaults.integerForKey("yourKey") // Returns 0 if the value is nil.