PromiseKit 8.1.1

PromiseKit 8.1.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布Aug 2023
SPM支持 SPM

维护者:Max HowellNathan HosseltonRoman Podymov



  • 作者
  • Max Howell

PromiseKit

badge-pod badge-languages badge-pms badge-platforms codecov


Promise 简化了异步编程,让您能更容易地专注于更重要的事情。它们易于学习,易于掌握,并能产生更清晰、更易读的代码。您的同事将会感谢您。

UIApplication.shared.isNetworkActivityIndicatorVisible = true

let fetchImage = URLSession.shared.dataTask(.promise, with: url).compactMap{ UIImage(data: $0.data) }
let fetchLocation = CLLocationManager.requestLocation().lastValue

firstly {
    when(fulfilled: fetchImage, fetchLocation)
}.done { image, location in
    self.imageView.image = image
    self.label.text = "\(location)"
}.ensure {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
}.catch { error in
    self.show(UIAlertController(for: error), sender: self)
}

PromiseKit 是为任何有 swiftc 的平台提供的深思熟虑且完整的 Promise 实现。它具有 出色的 Objective-C 桥接功能和针对 iOS、macOS、tvOS 和 watchOS 的 令人愉悦 的特殊化。它是全球最受欢迎的应用程序中使用的 top-100 pod 之一。

codecov

快速开始

在您的 Podfile

use_frameworks!

target "Change Me!" do
  pod "PromiseKit", "~> 8"
end

PromiseKit 8 支持 Xcode 13+ 的新版本。一些 Podspecs 因此 被删除。欢迎 Pull Requests。

PromiseKit 6、5 和 4 支持 Xcode 8.3、9.x 和 10.0;Swift 3.1、3.2、3.3、3.4、4.0、4.1、4.2、4.3 和 5.0(开发快照);iOS、macOS、tvOS、watchOS、Linux 和 Android;CocoaPods、Carthage 和 SwiftPM;(CI 矩阵)。

有关 Carthage、SwiftPM、Accio 等,或有关使用较旧 Swift 或 Xcode 的说明,请参阅我们的 安装指南。我们建议使用 CarthageAccio

PromiseKit 和 Swift 5.5+ Async/Await

自 Swift 5.5 版本起,Swift 语言现在支持 内嵌并发功能 async / await。有关将 PromiseKit 的最有用模式移植到这个新范式,请参阅 Async+

专业支持版本的 PromiseKit 已经推出

TideLift 为软件开发团队提供一个购买和维护软件的单源,并从最了解这些工具的专家处获得专业级支持,同时无缝集成现有工具。

通过 TideLift 获得对 PromiseKit 的专业支持.

文档

扩展

承诺的有效性与它们所代表的异步任务一样重要。因此,我们将(几乎)所有苹果的API转换成了承诺形式。默认的CocoaPod提供了承诺以及Foundation和UIKit的扩展。其他扩展可以通过在您的Podfile中指定额外的子规范来获得,例如:

pod "PromiseKit/MapKit"          # MKDirections().calculate().then { /*…*/ }
pod "PromiseKit/CoreLocation"    # CLLocationManager.requestLocation().then { /*…*/ }

我们所有的扩展都位于PromiseKit组织的单独仓库中。

我不想包含扩展!

那么不要加入它们

pod "PromiseKit/CorePromise", "~> 8"

注意: Carthage安装默认不包含任何扩展。

网络

承诺链通常以网络操作开始。因此,我们提供了对URLSession的扩展

// pod 'PromiseKit/Foundation'  # https://github.com/PromiseKit/Foundation

firstly {
    URLSession.shared.dataTask(.promise, with: try makeUrlRequest()).validate()
    // ^^ we provide `.validate()` so that eg. 404s get converted to errors
}.map {
    try JSONDecoder().decode(Foo.self, with: $0.data)
}.done { foo in
    //
}.catch { error in
    //
}

func makeUrlRequest() throws -> URLRequest {
    var rq = URLRequest(url: url)
    rq.httpMethod = "POST"
    rq.addValue("application/json", forHTTPHeaderField: "Content-Type")
    rq.addValue("application/json", forHTTPHeaderField: "Accept")
    rq.httpBody = try JSONEncoder().encode(obj)
    return rq
}

欢迎对Alamofire进行支持,请提交PR。

支持

请查看我们的故障排除指南。如果在查看后仍有问题,请在我们Gitter聊天频道我们的错误跟踪器上提问。

安全 & 缺陷报告或披露

https://tidelift.com/security