CocoaStorageKit 0.1.0

CocoaStorageKit 0.1.0

mxcat. 维护。



Storage

所有类型的存储

  • 都具有相同的接口。
  • 可扩展。
  • 线程安全。

接口

通过管理器提供的任何存储都可以作为键值对访问。您可以使用字符串,但您将收到警告,因为已经弃用了这种方法。框架原生建议使用基于字符串的枚举。

在示例中,我将使用以下内容

enum Auth: String {
    case username // .rawValue == "username"
    case isAdmin  // .rawValue == "isAdmin"
}

可用的管理器:

  • 钥匙串

    快捷方式:KC

  • UserDefaults

    快捷方式:UD

  • Cache [临时 / 持久]

    快捷方式:CH

您可以通过编写实现并订阅到 StorageManagerProtocol 来轻松扩展可用的管理器。

您应通过提供者访问任何存储。您可以使用它们作为静态或单例属性。

  • [Manager].[Provider]

开箱即用的 提供者:

  • .data
  • .bool
  • .string

提供者 允许您通过以下方式访问存储

  • 通过下标
    • provider[key]
  • 通过方法
    • provider.get(for: key)
    • provider.set(value, for: key)
  • 通过已弃用的下标和方法
    • provider[stringKey]
    • provider.get(forKey: stringKey)
    • provider.set(value, forKey: stringKey)

为了方便起见,您可以将自定义适配器下标扩展到框架的 Storage.Provider

extension Storage.Provider {
    subscript(key: Auth) -> Value? {    // Value is a Provider's assosiated type.
        get { get(for: key) }           // Just pass key to build-in getter,
        set { set(newValue, for: key) } // or key-value to build in setter.
    }
}

这将允许您不仅像这样访问存储:

  • Storage.[Manager].[Provider][Auth.username]

还可以像这样:

  • Storage.[Manager].[Provider][.username]

以钥匙串为例

  • Storage.Keychain.data.set(nil, forKey: "deletedItem")
  • Storage.Keychain.data.get(forKey: "deletedItem") // nil
  • Storage.Keychain.data["StringKeys"] = "Sucks c:".data(using: .utf8)
  • Storage.Keychain.default.string[.username] = "Root"
  • 存储.密钥链默认布尔值[.isAdmin] = true
  • 存储.KC布尔值[.isAdmin] // true