DefaultsKit 利用 Swift 4 的强大 Codable 功能,在 UserDefaults 的基础上提供一个 简单 和 强类型 包装。它只用不到 70 行代码就能完成这项工作。
安装 >>说明
<<
使用
实例化 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 let someKey = Key<String>("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
我们需要帮助
README.zh-CN.md 为中文
审查/翻译中文是世界上使用最多的语言之一,我希望 DefaultsKit 更具包容性,不幸的是我不会中文。如果你会说中文,并且想帮忙,请参见 问题 #1
谢谢