GroupWork

0.0.6

Easy, concurrent, asynchronous tasks in Swift.
quanvo87/GroupWork

What's New

2017-12-24T00:04:07Z

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)
      self.finish(withResult: result)
    }
  }

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

  func asyncFuncC() {
    start()
    networkCallC() { (result)
      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 have a working example.

License

MIT LICENSE

Authors

Please provide attribution, it is greatly appreciated.

Description

  • Swift Tools 4.0.0
View More Packages from this Author

Dependencies

  • None
Last updated: Sat Mar 30 2024 10:18:01 GMT-0900 (Hawaii-Aleutian Daylight Time)