RxPersistenceSettings 0.0.2

RxPersistenceSettings 0.0.2

Tomas Friml维护。



  • 作者
  • Tomas Friml

RxPersistenceSettings

CI Status Version License Platform Swift

该库的目的是提供一个通用的协议,用于处理任何持久化设置的简单操作,而不管使用的持久化存储方式如何。您还可以向设置添加一些元数据(例如名称和描述)。

目前仅支持UserDefaults,但可以简单扩展。

协议

PersistenceSettingBase

This is the base protocol which can be adopted without knowing the underlaying value type. Useful for generic UI to show the current formatted value, metadata and ability to trigger increase/decrease of the underlaying value. Changes in (formatted) value can also be observed.

/// Title of the setting.
var titleString: String { get }

/// Detailed info for the setting.
var infoString: String { get }

/// Formatted value to be shown in the UI.
var formattedValueString: String { get }

/// Determines if setting is of numerical value (rather than set of distinct values).
var isNumeric: Bool { get }

/// Determine if value is minimal allowed value.
var isAtMin: Bool { get }

/// Determine if value is maximal allowed value.
var isAtMax: Bool { get }

/// Increase the value.
func increase()

/// Increase the value.
func decrease()

/// Observable of formatted value change.
var formattedValueChanged: Observable<String> { get }

PersistenceSetting

Inherits from PersistenceSettingBase. Value (and also default value) is directly accessible and changes observable.

associatedtype T

/// Default value in case ther is no current value.
var defaultValue: T { get }

/// Current value for the setting.
var value: T { get set }

/// Observable of value changed.
var valueChanged: Observable<T> { get }

/// Format value and return as String
///
/// - Parameter value: Value to be formatted
/// - Returns: Formatted value as String
func format(value: T) -> String

持久化设置标志

具有基本类型 Bool 的专用 持久化设置。增加了 isSet 属性,并提供 toggle 函数,以便更容易地操作标志。

/// Get/set current flag value
var isSet: Bool { get set }

/// Toggle the current flag
func toggle()

UserDefaults 实现

上述协议都是为了实现 UserDefaults 而创建的。

UserDefaultsSettingBase

为相应的 UserDefaults 键添加 key 属性。

/// Key in user defaults for this persisted value.
var key: String { get }

UserDefaultsSetting

该类实现了 UserDefaultsSettingBase 并添加了 2 个初始化方法 - 一个带有元数据,一个不带。

/// Simplified initializer without setting metadata.
///
/// - Parameters:
///   - key: UserDefaults key
///   - defaultValue: Default value if no value is present
public init(key: String, defaultValue: T)

/// Full initializer with metadata.
///
/// - Parameters:
///   - titleString: Title string for the setting
///   - infoString: Info string for the setting
///   - key: UserDefaults key
///   - defaultValue: Default value if no value is present
public init(titleString: String, infoString: String, key: String, defaultValue: T)

NumericUserDefaultsSetting

为数值设置提供便利的类。使用 step 属性来确定数值的增加或减少。

/// Increase/decrease step for the setting's value.
public var step: Type


/// Simplified initializer without setting metadata.
///
/// - Parameters:
///   - key: UserDefaults key
///   - defaultValue: Default value if no value is present
///   - min: Minimal allowed value
///   - max: Maximal allowed value
///   - step: Increase/decrease step for the setting's value
public init(key: String, defaultValue: Type, min: Type, max: Type, step: Type)

/// Full initializer with metadata.
///
/// - Parameters:
///   - titleString: Title string for the setting
///   - infoString: Info string for the setting
///   - key: UserDefaults key
///   - defaultValue: Default value if no value is present
///   - min: Minimal allowed value
///   - max: Maximal allowed value
///   - step: Increase/decrease step for the setting's value
public init(titleString: String, infoString: String, key: String, defaultValue: Type, min: Type, max: Type, step: Type)

用法

您可以既使用预定义的 UserDefaults,也可以创建自己的。

简单的 UserDefaults 设置

let simpleSetting = UserDefaultsSetting<Int>(key: "simpleIntSettingKey", defaultValue: 10)
// Access value directly, increase/decrease not implemented for simple setting.
simpleSetting.value = 12

数值 UserDefaults 设置

let numericSetting = NumericUserDefaultsSetting<Int>(
    titleString: "Number of cats",
    infoString: "This setting holds number of cats",
    key: "complexIntSettingKey",
    defaultValue: 1,
    min: 0,
    max: 13,
    step: 1))

numericSetting.increase()
// value = 2

numericSetting.increase()
// value = 3

numericSetting.value = 13
// value = 13

示例

要运行示例项目,首先将仓库克隆,然后从示例目录运行 pod install

需求

iOS 8+,RxSwift/Cocoa。

安装

RxPersistenceSettings 通过 CocoaPods 提供。要安装,只需向您的 Podfile 添加以下行

pod 'RxPersistenceSettings'

作者

托马斯·弗里蒙特,[email protected]

许可

RxPersistenceSettings 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。