FOTask 0.2.1

FOTask 0.2.1

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Feb 2017
SwiftSwift Version 3.0
SPMSupports SPM

Maintained by Fernando Ortiz.



FOTask 0.2.1

  • By
  • fmo91

FOTask

Introduction

FOTask is a microframework (less than 100 LOCs), with a single objective in mind: separation of concerns. Every subclass of Task executes an action. Tasks can be composed in more complex Tasks, or parallelized without effort.

Example usage

Suclassing Task:

final class GetUserTask<Int, Task> {
    override func perform(_ input: Int, onSuccess: @escaping (String) -> Void, onError: @escaping (Error) -> Void) {
        ApiClient("https://somecoolapi.com/users/\(input)", .get,
            onSuccess: { (json: Any) in
                onSuccess(User(json: json))
            }, 
            onError: { (error: Error) in
                onError(error)
            }
        ) 
    }
}

Using Task:

let getUserTask = GetUserTask()

getUserTask.perform(3,
    onSuccess: { (user: User) in
        print(user.name)
    },
    onError: { (error: Error) in
        print("An error ocurred.")
    }
)

Composing Tasks:

let getUserWithIDTask = GetUserTask()
let getPostsFromUserTask = GetPostsFromUserTask()

let getPostsFromUserID = getUserWithIDTask => getPostsFromUserTask

getPostsFromUserID.perform(3,
    onSuccess: { (posts: [Post]) in
        print(posts.count)
    },
    onError: { (error: Error) in
        print("An error ocurred.")
    }
)

Parallelize Tasks

let getALotOfUserNames = Task.parallel(
    [
        GetUserName(),
        GetUserName(),
        GetUserName(),
        GetUserName(),
        GetUserName(),
        GetUserName(),
        GetUserName(),
        GetUserName(),
        GetUserName()
    ],
    reduce: { (userNames: [String]) -> [String] in
        return userNames
    }
)

getALotOfUserNames.perform(Void(),
    onSuccess: { userNames in
        print(userNames)
    },
    onError: { error in
        print("An Error!")
    }
)

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Requirements

  • iOS 8.0 or above.
  • Swift 3.0 or above.

Installation

FOTask is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "FOTask"

Coming soon

  • An explanatory Medium post
  • More documentation
  • More examples
  • More functional features?

Author

fmo91, [email protected]

License

FOTask is available under the MIT license. See the LICENSE file for more info.