UDPropertyWrapper 0.0.2

UDPropertyWrapper 0.0.2

struuuuggle 维护。



UDPropertyWrapper

Swift Package Manager compatible

这是针对 UserDefaults 的另一个类型安全包装器

示例

import UDPropertyWrapper

struct UserDefaultsStore {
  @UserDefault("age", defaultValue: 0)
  var age: Int
  
  // If you don't assign any value to `defaultValue`, `nil` will be inserted automatically.
  @UserDefault("lastName")
  var lastName: String?
}

由于 UDPropertyWrapper 是类型安全的,因此您不能忽略与属性关联的类型来分配 defaultValue 的值。

// ⛔️ Cannot convert value of type 'String' to expected argument type 'Int'
@UserDefault("age", defaultValue: "")
var age: Int

// ⛔️ 'nil' is not compatible with expected argument type 'Int'
@UserDefault("age", defaultValue: nil)
var age: Int

// ⛔️ Referencing initializer 'init(_:)' on 'UserDefault' requires that 'String' conform to ExpressibleByNilLiteral'
@UserDefault("lastName")
var lastName: String

UserDefault 进行了一些小的扩展,使您能够绑定枚举值。

enum UDKeys: String {
  case userId, countryCode
}

extension UserDefault where T: Codable {
  init(_ key: UDKeys, defaultValue: T) {
    self.init(key.rawValue, defaultValue: defaultValue)
  }
}

extension UserDefault where T: ExpressibleByNilLiteral {
  init(_ key: UDKeys) {
    self.init(key.rawValue, defaultValue: nil)
  }
}

// ✨ Great!
@UserDefault(.userId)
var userId: String

// ✨ Awesome!
@UserDefault(.countryCode)
var countryCode: Int?

要求

  • Swift 5.3+
  • Xcode12.0+

安装

CocoaPods

pod 'UDPropertyWrapper'

Swift Package Manager