如何从 AnyObject 转换 UserDefault 值?到一个 Int 这样我就可以保存它 [英] How do I convert a UserDefault value from AnyObject? to an Int so I can save it
问题描述
我正在尝试学习如何使用 UserDefaults,但不知道如何存储我需要存储的值之一.
I'm trying to learn how to work with UserDefaults and can't figure out how to store one of the values I need to store.
我有这个枚举:
enum CalculationFormula: Int {
case Epley
case Brzychi
case Lander
case Lombardi
case MayhewEtAl
case OConnerEtAl
}
这个类有一个名为selectedFormula"的属性,我希望能够将其存储为 NSUserDefaults 值:
and this class with a property called 'selectedFormula' that I want to be able to store as a NSUserDefaults value:
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 行给我一个错误:
The self.selectedFormula line gives me an error:
'Cannot assign value of type 'AnyObject?' to type 'CalculationFormula'
在对 SO 进行大量搜索并阅读 Apple 文档后,我学到了很多关于 UserDefaults 和 AnyObject 的知识,但没有找到答案.
After much searching on SO and reading the Apple documentation I learned a lot about UserDefaults and AnyObject, but didn't find an answer.
当我尝试将其转换为 Int 时,我以为我做到了:
I thought I did when I tried to cast it as an 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
我知道首选项值必须是这些类型之一(NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary),但我存储的是 Int,所以我应该在那里很好.
I know the preference values need to be one of these types (NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary) but I'm storing an Int so I should be good there.
我被卡住了,非常感谢您的帮助.请和谢谢.
I'm just stuck and would really appreciate some help. Please and thank you.
推荐答案
自从你的枚举
enum CalculationFormula: Int {
case Epley, Brzychi, Lander, Lombardi, MayhewEtAl, OConnerEtAl
}
扩展 Int
你可以使用它的 rawValue
.因此,您可以从/向 NSUserDefaults
读取/保存 Int
.
extends Int
you can use its rawValue
. So you can read/save an Int
from/to 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
}
这篇关于如何从 AnyObject 转换 UserDefault 值?到一个 Int 这样我就可以保存它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!