Popularity
1.0
Declining
Activity
0.0
Stable
37
2
3

Monthly Downloads: 0
Programming language: Swift
License: MIT License
Tags: Concurrency    
Latest version: v0.0.6

GroupWork alternatives and similar libraries

Based on the "Concurrency" category

Do you think we are missing an alternative of GroupWork or a related project?

Add another 'Concurrency' Library

README

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

  • for projects, drag GroupWork.swift to the project tree
  • for workspaces, include the whole GroupWork.xcodeproj

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:

  • the asynchronous functions should be able to run concurrently without affecting each other
  • work.result is only a simple Bool
  • this is not an answer to callback hell

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:

  • start() must be called before an asynchronous task
  • finish() must be called in the completion handler of an asynchronous task
  • start() and finish() calls must be balanced

Working Example

The [tests](Tests/GroupWorkTests/GroupWorkTests.swift) have a working example.

License

MIT [LICENSE](LICENSE)

Authors

Please provide attribution, it is greatly appreciated.


*Note that all licence references and agreements mentioned in the GroupWork README section above are relevant to that project's source code only.