Palauというライブラリを試してみました。
インストールは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