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 Package Manager

通过 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 Package Manager 集成。

Carthage

将其添加到您的 Cartfile

github "toastersocks/DelayedJob" ~> "1.0.0"

并按照此处的说明操作: https://github.com/Carthage/Carthage#adding-frameworks-to-an-application

测试

如果您在非 Linux 平台上,并且想要在 Linux 和/或 ARM 上的 Linux 上进行测试,则 bin 文件夹中有两个文件可以通过 Docker 运行测试。
要同时运行它们,请使其可执行,然后在项目根目录中

./bin/*Test.sh

(arm6(Raspberry Pi Zero 和 Original Pi)测试目前失败)