Skip to content
/ FOTask Public

Object oriented Swift tasks microframework with concurrency and composition ๐ŸŽ‰

License

Notifications You must be signed in to change notification settings

fmo91/FOTask

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

9 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

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.

About

Object oriented Swift tasks microframework with concurrency and composition ๐ŸŽ‰

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published