Home

Awesome

<p align="center"> <img src="Assets/banner.jpg" title="GroupWork"> </p>

iOS Linux Swift CocoaPods Version Status CocoaPods CocoaPods Carthage compatible Build Status MIT License

GroupWork is an easy to use Swift framework that helps you orchestrate your concurrent, asynchronous functions in a clean and organized way. This helps make large functions with multiple asynchronous tasks more clear and easy to follow.

Contents

  1. Requirements
  2. Installation
  3. Documentation
  4. Example Usage
  5. Working Example
  6. License
  7. Authors

Requirements

Swift 4

Installation

CocoaPods

For CocoaPods, add to Podfile:

pod 'GroupWork', '~> 0.0'

Carthage

For Carthage, add to Cartfile:

github "quanvo87/GroupWork"

Swift Package Manager

For SPM, add to your package dependencies:

.package(url: "https://github.com/quanvo87/GroupWork.git", .upToNextMinor(from: "0.0.0"))

Manually

Documentation

Here

Example Usage

End Goal

import GroupWork

...

func complexFunc(completion: @escaping (Bool) -> Void) {
  let work = GroupWork()

  work.asyncFuncA()
  work.asyncFuncB()
  work.asyncFuncC()

  work.allDone() {
    completion(work.result)
  }
}

...

complexFunc is a function that returns the result of three asynchronous functions asyncFuncA(), asyncFuncB(), and asyncFuncC(), running concurrently. The completion handler is called only when all these functions have completed. Usage of this library has enabled the above clean interface. This can be scaled to much higher than three asynchronous functions.

notes:

Set Up

There is some set up required in order to create complexFunc() from above:

import GroupWork

extension GroupWork {
  func asyncFuncA() {
    start()
    networkCallA() { (result) in
      self.finish(withResult: result)
    }
  }

  func asyncFuncB() {
    start()
    networkCallB() { (result) in
      self.finish(withResult: result)
    }
  }

  func asyncFuncC() {
    start()
    networkCallC() { (result) in
      self.finish(withResult: result)
    }
  }
}

Now you can create a GroupWork, and call work.simpleFuncA() on it like in the example.

notes:

Working Example

The tests have a working example.

License

MIT LICENSE

Authors

Please provide attribution, it is greatly appreciated.