[BREAKGLASS] Append-only mirror of github.com/signalapp/PromiseKit
Go to file
Max Howell 47f40ef75f
Update docs, fix broken links
Removes Chinese translations because they were far behind.

[ci skip]
2019-02-28 23:37:10 -05:00
.github Update issue template 2017-08-09 11:40:35 -04:00
Documentation Update docs, fix broken links 2019-02-28 23:37:10 -05:00
Extensions Update StoreKit extension; Tag 4.5.2 2018-01-29 11:06:23 -05:00
PromiseKit.playground PromiseKit.playground/section-1.swift renamed to Contents.swift to fix Xcode error - Playground file is missing a "Contents.swift" file. 2017-10-08 13:04:13 -05:00
PromiseKit.xcodeproj Update xcodeproj to Xcode 10 2018-06-04 19:23:02 -04:00
Sources Fix Swift 4.2 warnings 2018-06-04 19:23:16 -04:00
Tests Support Swift 4 and its (()) requirements :-/ 2017-08-07 17:51:03 -04:00
.gitignore Ignore .DS_Store too 2016-09-27 08:43:32 -07:00
.gitmodules PromiseKit 4 / Swift 3 / Xcode 8 2016-09-07 15:45:21 -07:00
.travis.yml Test against Xcode 10.1 2018-12-27 09:55:29 +00:00
docker-compose.yml Include docker-compose for building on linux. 2017-05-19 14:25:39 +02:00
LICENSE Move license to its own file 2016-08-03 19:47:55 -07:00
Package.swift SwiftPM support 2016-09-07 15:45:21 -07:00
PromiseKit.podspec CocoaPods fixes; Exts/Social update; Tag 4.4.2 2017-10-12 20:50:11 -04:00
README.md Update docs, fix broken links 2019-02-28 23:37:10 -05:00

PromiseKit

badge-pod badge-languages badge-pms badge-platforms Build Status


Promises simplify asynchronous programming, freeing you up to focus on the more important things. They are easy to learn, easy to master and result in clearer, more readable code. Your co-workers will thank you.

UIApplication.shared.isNetworkActivityIndicatorVisible = true

firstly {
    when(URLSession.dataTask(with: url).asImage(), CLLocationManager.promise())
}.then { image, location -> Void in
    self.imageView.image = image
    self.label.text = "\(location)"
}.always {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
}.catch { error in
    self.show(UIAlertController(for: error), sender: self)
}

PromiseKit is a thoughtful and complete implementation of promises for any platform with a swiftc, it has excellent Objective-C bridging and delightful specializations for iOS, macOS, tvOS and watchOS.

Quick Start

In your Podfile:

use_frameworks!

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

PromiseKit 4 supports Xcode 8.1, 8.2, 8.3, 9.0, 9.1, 9.2, 10.0 and 10.1; Swift 3.0, 3.1, 3.3, 4.0, 4.1 and 4.2; iOS, macOS, tvOS, watchOS, Linux and Android; CocoaPods, Carthage and SwiftPM; (CI Matrix).

For Carthage, SwiftPM, etc., or for instructions when using older Swifts or Xcodes see our Installation Guide.

Documentation

If you are looking for a functions documentation, then please note our sources are thoroughly documented.

Extensions

Promises are only as useful as the asynchronous tasks they represent, thus we have converted (almost) all of Apples APIs to promises. The default CocoaPod comes with promises for UIKit and Foundation, the rest can be installed by specifying additional subspecs in your Podfile, eg:

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

All our extensions are separate repositories at the PromiseKit organization.

Choose Your Networking Library

Promise chains are commonly started with networking, thus we offer multiple options: Alamofire, OMGHTTPURLRQ and of course (vanilla) NSURLSession:

// pod 'PromiseKit/Alamofire'
// https://github.com/PromiseKit/Alamofire
Alamofire.request("http://example.com", method: .post).responseJSON().then { json in
    //…
}.catch { error in
    //…
}

// pod 'PromiseKit/OMGHTTPURLRQ'
// https://github.com/PromiseKit/OMGHTTPURLRQ
URLSession.POST("http://example.com").asDictionary().then { json in
    //…
}.catch { error in
    //…
}

// pod 'PromiseKit/Foundation'
// https://github.com/PromiseKit/Foundation
URLSession.shared.dataTask(url).asDictionary().then { json in
    // …
}.catch { error in
    //…
}

Nobody ever got fired for using Alamofire, but at the end of the day, its just a small wrapper around NSURLSession. OMGHTTPURLRQ supplements NSURLRequest to make generating REST style requests easier, and the PromiseKit extensions extend NSURLSession to make OMG usage more convenient. But since a while now most servers accept JSON, so writing a simple API class that uses vanilla NSURLSession and our promises is not hard, and gives you the most control with the fewest black-boxes.

The choice is yours.

Support

Ask your question at our Gitter chat channel or on our bug tracker.