DefaultsKit 是一个轻量级的 Swift 库,它构建于 Codable 之上,为 UserDefaults 提供了一个简单、强类型且紧凑的封装。 它的代码少于 100 行,既易于使用又非常高效。
安装 >> 说明
<<
实例化 Defaults
,或获取 shared
实例
let defaults = Defaults() // or Defaults.shared
然后
// Define a key
let key = Key<String>("someKey")
// Set a value
defaults.set("Codable FTW 😃", for: key)
// Read the value back
defaults.get(for: key) // Output: Codable FTW 😃
if defaults.has(key) {
// Do your thing
}
如果您只需要知道某个键/值对是否存在,而无需实际使用该值,请使用
has()
方法,而不是可选的get(for:key)
。对于复杂对象,它将避免任何不必要的反序列化。
您可以通过扩展 DefaultsKey
来找到键的便捷封装。 这允许您使用 隐式成员表达式
// Extend with a custom key
extension DefaultsKey {
static var someKey: Key<Int> { Key("someKey") }
}
// Then use it like this
defaults.set("Some key", for: .someKey)
defaults.get(for: .someKey) // Output: Some key
要存储复杂对象,只需遵循 Codable 协议
struct Person: Codable {
let name: String
let age: Int
}
然后
// Create a key
let key = Key<Person>("personKey")
// Get an instance of your Codable conforming enum, struct or class
let person = Person(name: "Bonnie Greenwell", age: 80)
// Set the value
defaults.set(person, for: key)
最后
// Read it back
let person = defaults.get(for: key)
person?.name // Bonnie Greenwell
person?.age // 80
您还可以使用嵌套对象,只要它们符合 Codable
协议
enum Pet: String, Codable {
case cat
case dog
}
struct Person: Codable {
let name: String
let pets: [Pet]
}
// Get a Codable conforming instante
let person = Person(name: "Claire", pets: [.cat])
// Set the value
defaults.set(person, for: key)
// And read it back
let person = defaults.get(for: key)
person?.name // Claire
person?.pets.first // cat
DefaultsKit 在 MIT 许可下发布。 有关详细信息,请参见 LICENSE。
中文是世界上使用人数最多的语言,我希望 DefaultsKit 更加具有包容性,但不幸的是,我不懂中文。如果您懂中文并且愿意提供帮助,请参阅 issue #1
谢谢 🙏