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。