FOTask 0.2.1

FOTask 0.2.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2017年2月
SwiftSwift版本3.0
SPM支持SPM

Fernando Ortiz 维护。



FOTask 0.2.1

  • 作者:
  • fmo91

FOTask

简介

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

要求

  • iOS 8.0 或更高版本。
  • Swift 3.0 或更高版本。

安装

FOTask 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod "FOTask"

即将推出

  • Medium 上的解释性文章
  • 更多文档
  • 更多示例
  • 更多功能特性?

作者

fmo91,[email protected]

许可证

FOTask 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。