如何从 AnyObject 转换 UserDefault 值?到一个 Int 这样我就可以保存它 [英] How do I convert a UserDefault value from AnyObject? to an Int so I can save it

查看:59
本文介绍了如何从 AnyObject 转换 UserDefault 值?到一个 Int 这样我就可以保存它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆