AnyUserDefaults 1.0.1

AnyUserDefaults 1.0.1

刘东维护。



  • 贡献者:
  • anotheren

AnyUserDefaults

AnyUserDefaults是一个现代的UserDefaults包装器,专为Swift设计。特别是propertyWrapper将使您的代码更加清晰。

需求

  • iOS 10.0+ / macOS 10.12+ / tvOS 10.0+ / watchOS 3.0+
  • Xcode 11+
  • Swift 5.1+

用法

基本用法

您可以将DefaultKeyStore扩展为默认密钥存储。

extension DefaultKeyStore {
    
    var usernameKey: DefaultKey<String> { .init("username_key") }

    var passwordKey: DefaultKey<String> { .init("password_key") }
}

然后,使用@UserDefault将您的属性绑定到UserDefaults,它会自动进行读取写入或进行一些类型检查

class LoginViewController: UIViewController {

    @UserDefault(keyPath: \DefaultKeyStore.usernameKey, default: "Admin")
    var userName: String

    @UserDefault(keyPath: \DefaultKeyStore.passwordKey, default: "12345678")
    var password: String
}

高级用法

当您想使用自定义的KeyStore而不是默认的KeyStore,或者想在主应用程序和应用程序扩展之间共享UseDefaults数据时

首先创建自定义的KeyStore

struct CustomKeyStore {

    var lastLaunchDateKey: DefaultKey<Date> { .init("last_launch_date_key") }
}

创建自定义的DefaultAdaptor

typealias CustomDefaultAdapter = DefaultAdapter<CustomKeyStore>

extension CustomDefaultAdapter {
    
    static let shared = CustomDefaultAdapter(keyStore: CustomKeyStore(), userDefaults: UserDefaults(suiteName: "YOUR_APP_GROUP_NAME"!)
}

为您的CustomKeyStore创建用户默认扩展

extension UserDefault where KeyStore == CustomKeyStore {
    
    init(keyPath: KeyPath<CustomKeyStore, DefaultKey<Value>>, default value: Value, policy: DefaultPolicy = []) {
        self.init(keyPath: keyPath, default: value, adapter: CustomDefaultAdapter.shared, policy: policy)
    }
}

使用您的CustomKeyStore绑定您的属性

class SomeViewController: UIViewController {

    @UserDefault(keyPath: \CustomKeyStore.lastLaunchDateKey, default: Date())
    var lastLaunchDate: Date
}

DefaultValue类型

使用DefaultValue协议进行单值,使用DefaultArrayValue协议进行数组值。AnyUserDefaults支持所有标准的UserDefaults类型。

单个值 数组值 其中
Int [Int]
Float [Float]
Double [Double]
Bool [Bool]
Date [Date]
URL [URL]
Data [Data]
[String: Any]
Codable [Codable]
RawRepresentable [RawRepresentable] RawValue: DefaultValue

自定义Codable类型示例

struct MyCodableType: Codable, DefaultArrayValue {

    var a: Int
    var b: [String]
}

自定义RawRepresentable类型示例

enum MyRawRepresentableType: Int, DefaultValue {

    case first
    case second
    case third
}

安装

CocoaPods

CocoaPods是Cocoa项目的依赖管理器。有关使用和安装说明,请访问其网站。要使用CocoaPods将AnyUserDefaults集成到Xcode项目中,在您的Podfile中指定它

pod 'AnyUserDefaults', '~> 1.0.1'

Carthage

Carthage是一个去中心化的依赖管理器,它会构建您的依赖关系并提供二进制框架。要使用Carthage将AnyUserDefaults集成到Xcode项目中,在您的Cartfile中指定它

github "anotheren/AnyUserDefaults", '~> 1.0.1'

Swift Package Manager

Swift Package Manager是一种自动化Swift代码分发工具,且内置在swift编译器中。Swift包管理器

一旦您设置了Swift包,将AnyUserDefaults添加为依赖项与将其添加到Package.swift的依赖项值一样简单。

dependencies: [
    .package(url: "https://github.com/anotheren/AnyUserDefaults.git", from: "1.0.1")
]

许可

AnyUserDefaults按照MIT许可发布。有关详细信息,请参阅LICENSE