【Swift4】UserDefaultsとNSMutableArray

難しいことはわからないのですがUserDefaultsでNSMutableArrayを取り出すのが難しいらしいです。
詳しくはこちら参照。

きみが思い出になる前に – NSUserDefaultsに保存したmutableなオブジェクトはmutableCopyを使って作り直す
swift NSUserDefault で NSMutableArray が使えなくなった! – tomo358技術ブログ
NSMutableArrayをNSUserDefaultsで保存する | イリテク

なんか、冗長な感じになります。
Playgroundで書いてみた。

import UIKit

var mutableArray = NSMutableArray()

let alarmArray = [["hour": 07,
               "minute": 00,
               "switch":true],
              ["hour": 19,
               "minute": 00,
               "switch":true]]

    // NSUserDefaultsの取得
    let defaults = UserDefaults.standard
    //初期値として保存。
    defaults.register(defaults: ["muArray" : alarmArray])

    //NSMutableArrayとして引き出す。
    mutableArray = (defaults.object(forKey: "muArray")as AnyObject).mutableCopy() as! NSMutableArray
    print(mutableArray)

mutableArray = (defaults.object(forKey: “muArray”)as AnyObject).mutableCopy() as! NSMutableArray

ここの部分、なんか冗長ですよね〜。
で海外のstack overflow見てたらスマートに書かれてました。
参考サイト
ios – Ambiguous use of ‘mutableCopy()’ Swift3 – Stack Overflow

参考にすると、

import UIKit

var mutableArray = NSMutableArray()

let alarmArray = [["hour": 07,
               "minute": 00,
               "switch":true],
              ["hour": 19,
               "minute": 00,
               "switch":true]]

    // NSUserDefaultsの取得
    let defaults = UserDefaults.standard
    //初期値として保存。
    defaults.register(defaults: ["muArray" : alarmArray])

    //NSMutableArrayとして引き出す。
    mutableArray = defaults.mutableArrayValue(forKey: "muArray")
    print(mutableArray)

mutableArray = defaults.mutableArrayValue(forKey: “muArray”)

ここが重要↑こんな感じ。
よくわからんけどスマートですよね。
よかったよかった。
うじゃうじゃ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です