gpt4 book ai didi

ios - 如何从 AnyObject 转换 UserDefault 值?到一个 Int 这样我就可以保存它

转载 作者:搜寻专家 更新时间:2023-11-01 06:19:16 24 4
gpt4 key购买 nike

我正在尝试学习如何使用 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'

在对 SO 进行大量搜索并阅读 Apple 文档后,我了解了很多有关 UserDefaults 和 AnyObject 的知识,但没有找到答案。

当我尝试将其转换为 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,所以我应该在这方面做得很好。

我只是被卡住了,非常感谢一些帮助。请谢谢。

最佳答案

因为你的枚举

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

扩展 Int 你可以使用它的 rawValue。因此,您可以从 NSUserDefaults 读取/保存 Int

这是保存公式的方式

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
}

关于ios - 如何从 AnyObject 转换 UserDefault 值?到一个 Int 这样我就可以保存它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com