しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

PalauでUserDefaultsの管理を簡単に

Palauというライブラリを試してみました。

github.com

インストールはcocoapodsで行いました。

target 'MyApp' do
  use_frameworks!

  pod 'Palau'
end

使い方は下の通りです。
下のようにまずは変数を定義します。

import UIKit
import Palau

extension PalauDefaults {
    static var name: PalauDefaultsEntry<String> {
        get { return value("myName") }
        set { }
    }
}

定義した変数は下のように使えます。

print(PalauDefaults.name.value) // → nil
PalauDefaults.name.value = "MyString"
print(PalauDefaults.name.value) // → MyString

String以外にも対応しています。

extension PalauDefaults {
    static var count: PalauDefaultsEntry<Int> {
        get { return value("myCount") }
        set { }
    }
}

デフォルト値は下のようにwhenNilで定義します。

extension PalauDefaults {
    static var name: PalauDefaultsEntry<String> {
        get { return value("myName").whenNil(use: "myDefaultString") }
        set { }
    }
}

didSetを使ってセット時のイベントを取る事ができます。
ブロックの第一引数が新しい値、第二引数が古い値です。

extension PalauDefaults {
    static var name: PalauDefaultsEntry<String> {
        get { return value("myName").didSet { print($0, $1) } }
        set { }
    }
}

下のように条件付き値を扱う事もできます。
ここでは10以下場合は10がセットされるようにしています。

extension PalauDefaults {
    static var count: PalauDefaultsEntry<Int> {
        get { return value("myCount").ensure(when: { ($0 ?? 0) < 10 }, use: 10) }
        set { }
    }
}

PalauDefaults.count.value = 5
print(PalauDefaults.count.value) // → 10
PalauDefaults.count.value = 11
print(PalauDefaults.count.value) // → 11