PromiseKit在Promises中包装了外部封闭

时间:2018-10-27 23:58:03

标签: swift promisekit

我在Swift中使用外部库,因此无法控制return语句。我的理解是,为了使用PromiseKit,我应该将这些回报包装在promise中。这是正确的吗?

假设如此,我的工作代码如下:

private func getChannelImage(for channel: TCHChannel, completion: @escaping (UIImage?, CAProfileError?) -> Void) {
    if let members = channel.members {
        members.members(completion: { (result, paginator) in
            if result.isSuccessful() {
                // ... do something
            }
            else {
                    completion(nil, CAProfileError.UnknownError)
            }
        })
    }
}

这可能很难阅读。我正在尝试使用PromiseKit简化此过程。首先,我想将members.members(completion: { (result, paginator)简化为一个可以使用firstly { ... }语法进行调用的承诺。因此,我尝试执行以下操作:

private func asPromise(members: TCHMembers) -> Promise<TCHMemberPaginator> {
    return Promise<TCHMemberPaginator> { fulfill, reject in
        members.members(completion: { (result, paginator) in
            if result.isSuccesful() {
                fulfill(paginator)
            } else {
                reject()
            }
        })
    }
}

但是这种方法不起作用,并且我得到“无法在当前上下文中推断闭包类型”。我试图找到一个在线完成的用例的好例子,但是遇到了麻烦。关于如何正确兑现诺言的任何想法?

1 个答案:

答案 0 :(得分:2)

假设@Repository @AllArgsConstructor public class VerverDao { } TCHMemberPaginator如下,

TCHMembers

这是返回class TCHMemberPaginator {} class TCHMembers { func members(completion: (Bool, TCHMemberPaginator?) -> Void) {} } 的方法,

Promise