DefaultsKit

CI

cocoapods compatible carthage compatible

简体中文

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

招募帮助

审阅/翻译 README.zh-CN.md 到中文

中文是世界上使用人数最多的语言,我希望 DefaultsKit 更加具有包容性,但不幸的是,我不懂中文。如果您懂中文并且愿意提供帮助,请参阅 issue #1

谢谢 🙏