如何从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
。 所以你可以读/保存一个Int
到NSUserDefaults
。
这是你如何保存一个公式
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.