测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新发布 | 2017年9月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Marin Todorov 维护。
你是否曾希望 try
在某些时候尝试更努力一些?来看看 retry
要运行示例项目,请首先克隆仓库,然后在 Example 目录中运行 pod install
完整的测试套件显示了各种使用场景。
注意:同步 retry
不适用于主线程(因为如果你有延迟等,它将阻止主线程)。对于主线程,最好是考虑使用 retryAsync
(更多信息见下文)。
默认参数 - 没有延迟重试三次
retry {
... do some throwing work ...
}
捕获最后一个错误,并在所有尝试完成后添加一个 defer 块 - 将重试最多 10
次。您可以使用最终块中的任何一个或两个
retry (max: 10) {
... do some throwing work ...
}
.finalCatch {lastError in
print("This simply won't happen. Failed with: \(lastError)")
}
.finalDefer {
print("Finished trying")
}
在重试之间添加 2
秒延迟
retry (max: 5, retryStrategy: .delay(seconds: 2.0)) {
... do some throwing work ...
}
实现任何自定义延迟逻辑(以下是在每次尝试后在等待时间上乘以的示例)
retry (max: 5, retryStrategy: .custom {count, lastDelay in return (lastDelay ?? 1.0) * 2.0} ) {
... do some throwing work ...
}
基于任何自定义逻辑限制重试次数 - 如果您从自定义策略中返回 nil
,则 retry
将停止尝试
retry (max: 5, retryStrategy: .custom {count,_ in return count > 3 ? nil : 0} ) {
... do some throwing work ...
}
与 retry
的语法完全相同。不同的行为是如果第一次尝试失败,retryAsync
将异步继续尝试,而不是阻塞当前线程。
Retry 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中即可
pod "Retry"
由于 Retry 是 swift3 库,您必须将此代码段添加到项目的 Podfile 中,以更新目标的 swift 语言版本
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.0'
config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '10.10'
end
end
end
Marin Todorov,2016 年至今
受 https://github.com/RxSwiftCommunity/RxSwiftExt 中的重试运算符的启发
Retry 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。