Object oriented Swift tasks microframework with concurrency and composition 🎉
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Example Added parallel methods Feb 8, 2017
FOTask Added parallel methods Feb 8, 2017
.gitattributes First version Feb 8, 2017
.gitignore Initial commit Feb 8, 2017
.travis.yml Initial commit Feb 8, 2017
FOTask.podspec Added parallel methods Feb 8, 2017
LICENSE Initial commit Feb 8, 2017
README.md Update README.md Feb 24, 2017
_Pods.xcodeproj Initial commit Feb 8, 2017

README.md

FOTask

CI Status Version License Platform

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: Task<Int, User> {
	override func perform(_ input: Int, onSuccess: @escaping (User) -> 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, ortizfernandomartin@gmail.com

License

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