UserCaches

Build Status Swift4 compatible

一个类似 iOS 平台上的 UserDefaults 的键值存储缓存工具。

用法

常规用法

类似 UserDefaults

// Save cache.
let intVal = 123
try UserCaches.standard.set(intVal, forKey: key)
// Get cache. Specify the type('Int') to decide generic type.
let cache: Int = try UserCaches.standard.value(forKey: key)

UserCaches.standard 是 UserCaches 的一个全局实例。

也可以创建新的实例

let cacheHelper = try UserCaches(cachePath: URL(fileURLWithPath: "/tmp/usercache.db"))

高级用法

但是,我建议使用以下用法。(以百度App的设置为例)

import UserCaches

struct User: Codable {
    let id: Int64
    let name: String
}

enum ComBaiduMobileUserSetting: String, UserCachesSettable {
    /// 隐私设置 - 允许通过手机号搜索到我
    case privacy_findMeByPhoneNumber
    /// 隐私设置 - 可通过感兴趣的人找到我
    case privacy_findMeByInteresting
    /// 隐私设置 - 开启通讯录关联
    case privacy_relateAddressList
    /// 隐私设置 - 黑名单
    case privacy_blacklist
    /// 字体大小
    case font_size
    var identifierMode: CacheKeyMode { return .identifier }
}
// Save caches
ComBaiduMobileUserSetting.privacy_findMeByPhoneNumber.storage = true
ComBaiduMobileUserSetting.privacy_findMeByInteresting.storage = false
ComBaiduMobileUserSetting.privacy_relateAddressList.storage   = false
ComBaiduMobileUserSetting.privacy_blacklist.storage = [CacheCodability(User(id: 100120054,
                                                                            name: "abc"))]
ComBaiduMobileUserSetting.font_size.storage = 20

// Get caches
let isFindMeByPhoneNumber: Bool? = ComBaiduMobileUserSetting.privacy_findMeByPhoneNumber.value()
let isFindMeByInteresting: Bool? = ComBaiduMobileUserSetting.privacy_findMeByInteresting.value()
let isRelateAddressList: Bool? = ComBaiduMobileUserSetting.privacy_relateAddressList.value()
let blacklist: [CacheCodability<User>] = ComBaiduMobileUserSetting.privacy_blacklist.value()
let fontSize: Int = ComBaiduMobileUserSetting.font_size.value() ?? 16

如果您将 identifierMode 设置为 CacheKeyMode.identifier, UserCachesSettable 会将大写字母转换为小写字母,并在枚举名称的转换后的左侧插入“.”,并将枚举案例中的 “_” 替换为 “.”。

如上所示

"ComBaiduMobileUserSetting" => "com.baidu.mobile.user.setting"

"privacy_findMeByPhoneNumber" => "privacy.findMeByPhoneNumber"

在这个例子中,case privacy_findMeByPhoneNumber 会被转换为 com.baidu.mobile.user.setting.privacy.findMeByPhoneNumber,并以此作为键,与 true 相关联。

默认支持的类型

UseCaches 默认支持

默认支持的类型
Bool
Int, Int64, UInt, Uint64
Float, Double
String, Data
Date (使用 TimeInterval 实现)
Array<CacheCodable>
Dictionary<Key: CacheCodable, Value: CacheCodable>
CacheCodability<Codable>

特别地,如果一个结构体(或类)遵循 Codable 协议,使用 CacheCodability 包装该结构体(或类),UserCaches 也可以接受它。 参见上面的 CacheCodability<User>

安装

注意: UserCaches 需要 Swift 4.1 和 Xcode 9.3+

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。 使用 CocoaPods 安装 UserCaches

  1. 确保 已经安装 CocoaPods. (UserCaches 需要 1.0.0 或更高版本.)

    # Using the default Ruby install will require you to use sudo when
    # installing and updating gems.
    [sudo] gem install cocoapods
  2. 更新你的 Podfile,添加以下内容

    use_frameworks!
    
    target 'YourAppTargetName' do
        pod 'UserCaches', '~> 0.0.5'
    end
    
  3. 运行 pod install --repo-update.

Swift Package Manager

Swift Package Manager 是一个用于管理 Swift 代码分发的工具。

  1. 将以下内容添加到您的 Package.swift 文件中
dependencies: [
    .package(url: "https://github.com/CUITCHE/UserCaches.git", from: "0.0.3")
]
  1. 构建您的项目
$ swift build

如何测试

  1. clone 这个仓库.
  2. cd 到仓库目录.
  3. 执行命令 swift test.

作者

hejunqiu

许可

UserCaches 使用 MIT 许可证.