Track your Swift Concurrency Tasks activity in an aggregate with ease.

? Description

Swift’s Concurrency makes working with asynchronous tasks through async/await a breeze. Hooking up a loading state for one task is just as easy. But what if you have multiple tasks running? Tracking one single loading state in those cases is a bit harder.

Introducing TaskLoadingAggregate ?

TaskLoadingAggregate makes this a breeze by creating a loading state aggregate for your tasks. Each tracked task will report their status to the aggregate and as long as a task is loading the aggregate will report isLoading as true.

? Usage

Hooking up a task to a TaskLoadingAggregate is as simple as:

let loadingAggregate = TaskLoadingAggregate()

// First task
Task {
    try await doSomething()

// Second task
Task {
    try await doSomethingElse()

// You can now bind your UI or whatever to loadingAggregate's @Published isLoading property ?

Q: Is this only for Task?

No, you can use a TaskLoadingAggregate however you like, but then it is up to you to increment and decrement the aggregates loading counter:

let loadingAggregate = TaskLoadingAggregate()

// In async function
func doSomething() async {
    await doSomethingElse()

// In classic closure
self.doSomething(completion: {

? Who cooked it?

@amnell amnell

⚖️ License

TaskLoadingAggregate is generously distributed under the MIT.


View Github