此项目代表一个简单的持久性库,主要用于在内存和持久存储中存储Data
。到目前为止,我们(iOS团队)有几个扩展,使得保存字符串和UIImage对象变得更加方便。
Swift 3.0
iOS 8.0+
没有其他依赖项。
当前支持的安装选项
创建一个Package.swift
文件。
import PackageDescription
let package = Package(
name: "FivePersistenceTestProject",
targets: [],
dependencies: [
.Package(url: "https://github.com/fiveagency/ios-five-persistence", majorVersion: 1)
]
)
$ 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
的方法/类型相似的签名
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
对原始类型/枚举的添加是 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
层外不需要它。
五持久性库团队(按字母顺序排列)
FivePersistence 在 MIT 许可证下可用。有关更多信息,请参阅LICENSE 文件。