1

UserDefaults の操作方法を学習しようとしていますが、保存する必要がある値の 1 つを保存する方法がわかりません。

私はこの列挙型を持っています:

enum CalculationFormula: Int {

  case Epley

  case Brzychi

  case Lander

  case Lombardi

  case MayhewEtAl

  case OConnerEtAl
}

そして、NSUserDefaults値として保存できるようにしたい「selectedFormula」というプロパティを持つこのクラス:

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 を格納しているので、そこに問題はありません。

私は立ち往生しているだけで、本当に助けていただければ幸いです。よろしくお願いします。

4

3 に答える 3

3

あなたの列挙以来

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

Intその を使用できるように拡張しますrawValueIntしたがって、 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
}
于 2016-05-21T23:18:22.633 に答える
0

値を次のように保存する必要があります。

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

値を次のようにロードします。

userDefaults.integerForKey("yourKey") // Returns 0 if the value is nil.
于 2016-05-21T23:18:53.877 に答える