DelayedJob
在稍后运行一个任务。如果已有任务已调度,则后续对该任务的请求将导致已调度任务被取消或新运行被忽略。可以根据配置来设置对最近或最早的安排任务的优先级。
用途
这很有用,例如,当您想要在用户键入时发起网络请求,但只在不必要地触发过多网络请求的情况下,即用户停止键入至少一秒钟时。
let networkRequest = DelayedJob(prioritize: .later) { networkFetcher.sendRequest(searchText) }
func editingDidChange(sender: UITextField) {
searchText = sender.text
networkRequest.run(withDelay: 1)
}
使用 .later
优先级,如果在实际运行之前请求运行,则先前安排的运行将被取消,并重新安排新的运行。这样,只有在用户停止键入超过一秒钟时,网络请求才会实际运行。
安装
CocoaPods
将其添加到您的 Podfile
target 'MyApp' do
use_frameworks! # Remove this line to use as a static framework
pod 'DelayedJob'
end
并运行 pod install
Swift 包管理器
swift package
通过 将这个仓库添加到您的 Package.swift
依赖中
.package(url: "https://github.com/toastersocks/DelayedJob", from: "1.0.0"),
并将 Delayed Job
作为您目标的依赖项添加
.target(
name: "MyTarget",
dependencies: ["DelayedJob"]),
.testTarget(
name: "MyTargetTests",
dependencies: ["MyTarget"]),
所有内容汇总在一起
// swift-tools-version:5.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyExecutableOrLibrary",
platforms: [.macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3)], // <-- for Apple platforms, add at least one platform. For non-Apple platforms, this isn't necessary.
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/toastersocks/DelayedJob", from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "MyTarget",
dependencies: ["DelayedJob"]),
.testTarget(
name: "MyTargetTests",
dependencies: ["MyTarget"]),
]
)
通过 Xcode
如果使用的是 Xcode 11 或更高版本,您可以在 Xcode 中使用 Swift 包管理器集成。
- 选择您的
.xcproject
文件 - 选择
PROJECT
下的项目 - 选择
Swift Package
- 点击
+
符号 - 将此仓库地址复制到文本框中并点击
Next
- 在下一屏幕上选择您的版本/分支
- 选择您的目标并点击
完成
! - 哇 💥
Carthage
将它添加到您的 Cartfile
github "toastersocks/DelayedJob" ~> "1.0.0"
并按照此处说明操作: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application
测试
如果您在非 Linux 平台,并希望测试 Linux 和/或 Linux on ARM,则 bin
文件夹中有两个文件可以通过 Docker 运行测试。
要运行它们两个,使它们可执行,然后从项目根目录运行
./bin/*Test.sh
(arm6 (Raspberry Pi Zero 和 Original Pi) 测试目前未能通过)