https://github.com/mainasuk/userdefaultspreference
https://github.com/mainasuk/userdefaultspreference
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/mainasuk/userdefaultspreference
- Owner: MainasuK
- Created: 2020-05-15T13:34:30.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-05-15T13:37:25.000Z (about 6 years ago)
- Last Synced: 2025-03-01T00:12:27.687Z (over 1 year ago)
- Language: Swift
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# UserDefaultsPreference
Extension the UserDefaults from Foundation.framework.
## Setup
Setup your preferences with @objc dynamic setter and getter.
```swift
import Foundation
import UserDefaultsPreference
final class MainWindowPreferences: NSObject, Preferences {
let defaults: UserDefaults
static var shared: MainWindowPreferences = MainWindowPreferences()
init(defaults: UserDefaults = UserDefaults(suiteName: "MainWindow-shared")!) {
self.defaults = defaults
}
}
extension MainWindowPreferences {
@objc dynamic var navigatorSidebarExpand: Bool {
get { return defaults[#function] ?? true }
set { defaults[#function] = newValue }
}
…
}
```
## Usage
```swift
// set Combine.framework style observer dispose bag as class property
private var observers = Set()
let defaults = UserDefaults(suiteName: document.id)!
// listen value change
MainWindowPreferences(defaults: defaults).observe(\.navigatorSidebarExpand, options: [.initial, .new]) { [weak self] (preferences, _) in
let value = preferences.navigatorSidebarExpand
…
}
.store(in: &observers)
// update value
MainWindowPreferences(defaults: defaults).navigatorSidebarExpand.toggle()
```