LoginSignup
10

More than 5 years have passed since last update.

NSUserDefaultsのちょっと賢いと思った使い方

Last updated at Posted at 2015-12-09

すごい小ネタですが、いいなと思ったのでメモ。

以下のようなデータの形を持ちたいと考えていました。

swift
[
  ["ID": "1", "name": a],
  ["ID": "2", "name": b], 
  ["ID": "3", "name": c], 
]

辞書型のデータを配列で持つって感じですね。
ちょっとしたデータだったのでわざわざCoreData使うまでもないなと思ったので
UserDefaultsを使おうと途中まで書いていました。

がしかし、途中で実はこれちょっとまずったなと思いました。
基本的にIDからnameを引こうと思っていたので、毎回配列の中身を見てIDをみるのってあんまり賢くないなと。。
大したデータ量じゃないのでパフォーマンス的に問題なかったのですが、もっといい方法ないかなーと思い先輩に相談した所、以下のように保存すればいいんじゃない?とアドバイスもらいました

swift
let ud = NSUserDefaults.standardUserDefaults()
ud.setObject(name, forKey: "hogehoge_" + ID)

おお、確かにこれならいざ値を使う時にID渡すだけで検索になっていい!
データベース作るまでもないならこれぐらいで十分だし早く書けるしシンプルでいいなと思ったのでメモです。

あと、余談ですが毎回UserDefaultsを初期化してsynchronizeするのはちょっとしょっぱいので
ラッパークラスを作るともっとシンプルにかけてよさそうですね。

swift
class HogeUserDefaults {
    private class func userDefaults() -> NSUserDefaults {
         return NSUserDefaults.standardUserDefaults()
    }

    class func setObject(object:AnyObject, key:String) -> Void {
          self.userDefaults.setObject(name, forKey: "hogehoge_" + "ID")
          self.userDefaults.synchronize()
    }
}


class Hoge {
    func save() {
      HogeUserDefaults.setObject(object,key)  // 一行で簡単呼び出し!
    }
}

短いですが以上です!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10