五持久性 1.0.1

五持久性 1.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年1月
SwiftSwift版本3.0
SPM支持SPM

Miran Brajsa维护。



  • iOS库团队

五持久性

关于

此项目代表一个简单的持久性库,主要用于在内存和持久存储中存储Data。到目前为止,我们(iOS团队)有几个扩展,使得保存字符串和UIImage对象变得更加方便。

要求

  • Xcode 8.0+
  • Swift 3.0

  • iOS 8.0+

  • OSX 10.10+

安装

没有其他依赖项。

当前支持的安装选项

Swift Package Manager

创建一个Package.swift文件。

import PackageDescription

let package = Package(
    name: "FivePersistenceTestProject",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/fiveagency/ios-five-persistence", majorVersion: 1)
    ]
)

手动使用git子模块

  • 添加五持久性作为子模块
$ git submodule add https://github.com/fiveagency/ios-five-persistence.git
  • FivePersistence.xcodeproj拖动到项目导航器中。

  • 转到项目 > 目标 > 编译阶段 > 与二进制文件链接,单击+并选择FivePersistence.framework目标。

示例

要运行示例项目,请执行以下操作。

  • 通过以下方式克隆存储库:
$ git clone https://github.com/fiveagency/ios-five-persistence.git YOUR_DESTINATION_FOLDER
  • 打开FivePersistence.xcworkspace,选择Example方案并执行run。此方法将构建所有内容并运行示例应用程序。

用法

保持者

保持者类负责读取、写入和删除操作。它可以使用以下方式初始化

public init(storageDirectory: FileManager.SearchPathDirectory = .cachesDirectory, shouldExcludeFromBackup: Bool = true)

当实际使用保持者时,我们有两种选择。同步和异步。当使用第一种方法时,所有方法都返回KeeperResult,它是一个定义为以下形式的元组

/**
 Keeper return type for synchronous calls.

 The first `bool` flag is stating whether or not the call was successfull.
 The second `Data` object represents the requested `Data` provided `success` equals `true`. If `success` equals `false`
 the third `Error` parameter will present the underlaying error.
 */

public typealias KeeperResult = (Bool, Data?, Error?)

返回KeeperResult的方法

public func data(forKey key: String) -> KeeperResult
public func save(data: Data, forKey key: String) -> KeeperResult
public func remove(dataForKey key: String) -> KeeperResult

示例用法

guard let stringData = "some example string".data(using: .utf8) else {
    return
}

let keeper = Keeper()
let (success, _, error) = keeper.save(data: stringData, forKey: "exampleKey")
if let `error` = error, !success {
    print("Failed saving data with error: \(error)")
    return
}
print("Horaaaaay! We've saved our data!")

如果我们想读取数据,可以这样做

let keeper = Keeper()
let (success, data, error) = keeper.data(forKey: "exampleKey")
if let `error` = error, !success {
    print("Failed reading data with error: \(error)")
    return
}
guard let stringData = data else {
    print("Hmm, this should not happen :(")
    return
}
let string = String(data: stringData, encoding: .utf8)
print("Our string is: \(string)")

现在,如果我们采用异步方法,我们将定义 KeeperCompletion 的回调如下

/**
 Keeper return type for asynchronous calls.

 - parameter result: The tuple values those represented by `KeeperResult` which are(success: Bool, data: Data?,
 error: Error?)
 */

public typealias KeeperCompletion = (_ result: KeeperResult) -> Void

异步使用的方法有

public func data(forKey key: String, completion: @escaping KeeperCompletion)
public func save(data: Data, forKey key: String, completion: @escaping KeeperCompletion)
public func remove(dataForKey key: String, completion: @escaping KeeperCompletion)

请注意,所有这些异步方法都是线程安全的,并且所有回调都在主队列上执行。

示例用法

guard let stringData = "some other example string".data(using: .utf8) else {
    return
}

let keeper = Keeper()
keeper.save(data: stringData, forKey: "exampleKey") { success, _, error in
    if let `error` = error, !success {
        print("Failed saving data with error: \(error)")
        return
    }
    print("Horaaaaay! We've saved our data!")
}

扩展

为了便于使用,我们引入了一些扩展,它们有自己返回类型和相关方法。所有它们都具有与基于 Data 的方法/类型相似的签名

String

public typealias KeeperStringResult = (Bool, String?, Error?)
public typealias KeeperStringCompletion = (_ result: KeeperStringResult) -> Void

public func string(forKey key: String, completion: @escaping KeeperStringCompletion)
public func save(string: String, forKey key: String, completion: @escaping KeeperStringCompletion)

public func string(forKey key: String) -> KeeperStringResult
public func save(string: String, forKey key: String) -> KeeperStringResult

UIImage

对原始类型/枚举的添加是 KeeperImageFormat 枚举,它指定图像应该保存为 'png' 或 'jpeg'。


public enum KeeperImageFormat {
    case png
    case jpg(CGFloat)
}

public typealias KeeperImageResult = (Bool, UIImage?, Error?)
public typealias KeeperImageCompletion = (_ result: KeeperImageResult) -> Void

public func image(forKey key: String, completion: @escaping KeeperImageCompletion)
public func save(image: UIImage, forKey key: String, format: KeeperImageFormat = .png, completion: @escaping KeeperImageCompletion)

public func image(forKey key: String) -> KeeperImageResult
public func save(image: UIImage, forKey key: String, format: KeeperImageFormat = .png) -> KeeperImageResult

注意: 在扩展中没有提供 remove(forKey key: String),因为我们除了在基础 Data 层外不需要它。

作者

五持久性库团队(按字母顺序排列)

  • Miran Brajsa

许可证

FivePersistence 在 MIT 许可证下可用。有关更多信息,请参阅LICENSE 文件。