PSOperations 开源项目教程
1、项目介绍
PSOperations 是一个基于 NSOperation
和 NSOperationQueue
的框架,旨在使操作在项目的各个部分中更容易使用。这个框架是对 WWDC 2015 中 Advanced NSOperations 会议提供的示例代码的改编。PSOperations 支持 Swift 5.x、iOS 8.0、tvOS 9.0 和 macOS 10.11。
2、项目快速启动
安装
首先,通过 Carthage 构建框架,然后将构建的 PSOperations 框架拖入你的 Xcode 项目中。
carthage build
导入框架
在你的项目中导入 PSOperations:
import PSOperations
创建和运行操作
创建一个操作队列:
let operationQueue = OperationQueue()
创建一个 BlockOperation 并添加到队列中:
let blockOperation = BlockOperation {
print("perform operation")
}
operationQueue.addOperation(blockOperation)
3、应用案例和最佳实践
自定义 UIStoryboardSegue
PSOperations 可以用于创建自定义的 UIStoryboardSegue,确保在执行 segue 之前完成某个操作。例如,一个认证操作可以在 segue 之前验证用户是否已认证。
class OperationSegue: UIStoryboardSegue {
var operation: Operation?
var segueCompletion: ((Bool) -> Void)?
override func perform() {
if let operation = operation {
let opQ = OperationQueue()
var retainedSelf: OperationSegue? = self
let completionObserver = BlockObserver { _, errors in
if errors.isEmpty {
segueCompletion?(true)
} else {
segueCompletion?(false)
}
retainedSelf = nil
}
operation.addObserver(completionObserver)
opQ.addOperation(operation)
}
}
}
使用 BlockObserver
操作实例可以通过 OperationObserver 协议进行观察,PSOperations 提供了一些实现该协议的类型,如 BlockObserver 和 TimeoutObserver。
let blockOperation = BlockOperation {
print("perform operation")
}
let blockObserver = BlockObserver(
startHandler: { _ in
print("Operation started")
},
produceHandler: { _, _ in
print("Operation produced new operation")
},
finishHandler: { _, _ in
print("Operation finished")
}
)
blockOperation.addObserver(blockObserver)
operationQueue.addOperation(blockOperation)
4、典型生态项目
PSOperationsHealth
PSOperationsHealth 框架允许你在操作中使用 HealthKit,但需要注意,如果未实际使用 HealthKit,可能会导致 App Store 审核拒绝。
import PSOperationsHealth
PSOperationsPassbook
PSOperationsPassbook 框架允许你在操作中使用 PassKit。
import PSOperationsPassbook
PSOperationsCalendar
PSOperationsCalendar 框架允许你在操作中使用 EventKit。
import PSOperationsCalendar
PSOperationsLocation
PSOperationsLocation 框架允许你在操作中使用 CoreLocation。
import PSOperationsLocation
通过这些生态项目,你可以更灵活地在操作中集成各种系统服务,从而提高应用的功能性和用户体验。