测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年2月 |
SwiftSwift版本 | 3.0 |
SPM支持SPM | ✗ |
由 Fernando Ortiz 维护。
FOTask 是一个微框架(小于100 LOC),它的唯一目标就是:**关注点的分离**。每个 Task
的子类都执行一个操作。Task
可以被组合成更复杂的 Task
或无需努力并行化。
派生 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)
}
)
}
}
使用 Task
let getUserTask = GetUserTask()
getUserTask.perform(3,
onSuccess: { (user: User) in
print(user.name)
},
onError: { (error: Error) in
print("An error ocurred.")
}
)
组合 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.")
}
)
并行化 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 目录中运行 pod install
FOTask 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "FOTask"
fmo91,[email protected]
FOTask 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。