[
] (https://github.com/Carthage/Carthage)
Swift µframework providing Future<T, Error>.
This library is inspired by the talk of Javier Soto at SwiftSubmit2015 and the Future implementation in Scala.
And this is using antitypical/Result.
func requestRepository(repoId:Int64, completion:(Repository?,NSError?)->Void){}func requestUser(userId:Int64, completion:(User?,NSError?)->Void){} // get owner info of a given repository requestRepository(12345){ repo, error iniflet repo = repo {requestUser(repo.ownerId){ user, error iniflet user = user { // do something }else{ // error handling }}}else{ // error handling }}letfuture=requestRepository(12345).map{ $0.ownerId }.flatMap(requestUser) future.onCompleted{ result inswitch result {case.Success(let user):println(user)case.Failure(let error):println(error)}}Shorthand by using operator
letfuture=requestRepository(12345)<^>{ $0.ownerId }>>- requestUser future.onCompleted{ result inswitch result {case.Success(let user):println(user)case.Failure(let error):println(error)}}map<^>
letf=requestUser("nghialv")<^>{ $0.id } f.onSuccess{ userId inprintln(userId)}flatMap>>-
letf=searchRepositories("Hakuba")<^>{ $0.first!.ownerName }>>- requestUser f.onComplete{ result inswitch result {case.Success(let user):println(user)case.Failure(let error):println(error)}}filter
lete=NSError(domain:"noSuchElement", code:1, userInfo:nil)letf1=searchRepositories("Hakuba")letf= f1.filter(e){ $0.count >0}<^>{ $0.first!.ownerName }>>- requestUser f.onComplete{ result inswitch result {case.Success(let user):println(user)case.Failure(let error):println(error)}}andThen
// side-effect varreposCount=0letf1=searchRepositories("Hakuba")letf2= f1.andThen{ result inswitch result {case.Success(let repos): reposCount = repos.value.count case.Failure(let error):break}}letf3= f2 <^>{ $0.first!.ownerName }>>- requestUser f3.onComplete{ result inswitch result {case.Success(let user):println(user)case.Failure(let error):println(error)}}recoverzip
letf1=searchRepositories("Future")letf2=requestUser("nghialv")letf3= f1.zip(f2) f3.onSuccess{ repos, user inprintln(repos)println(user)}flatten
- Using Carthage
- Insert
github "nghialv/Future"to your Cartfile- Run
carthage update
- Using Cocoapods
- Insert
use_frameworks!to your Podfile- Insert
pod "Future"to your Podfile- Run
pod install
- Using Submodule
- Swift 1.2 (Xcode 6.3 or later)
- iOS 8.0 or later