TestsTested | ✗ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Feb 2017 |
SwiftSwift Version | 3.0 |
SPMSupports SPM | ✗ |
Maintained by Fernando Ortiz.
FOTask is a microframework (less than 100 LOCs), with a single objective in mind: separation of concerns. Every subclass of Task
executes an action. Task
s can be composed in more complex Task
s, or parallelized without effort.
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!")
}
)
To run the example project, clone the repo, and run pod install
from the Example directory first.
FOTask is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "FOTask"
fmo91, [email protected]
FOTask is available under the MIT license. See the LICENSE file for more info.