【问题标题】:PromiseKit wrapping external closure in PromisesPromiseKit 在 Promises 中包装外部闭包
【发布时间】:2018-10-27 23:58:02
【问题描述】:

我在 Swift 中使用了一个外部库,所以我无法控制返回语句。我的理解是,为了使用 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 { ... } 语法调用的promise。因此,我尝试执行以下操作:

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()
            }
        })
    }
}

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

【问题讨论】:

    标签: swift promisekit


    【解决方案1】:

    假设TCHMemberPaginatorTCHMembers 如下,

    class TCHMemberPaginator {}
    class TCHMembers {
        func members(completion: (Bool, TCHMemberPaginator?) -> Void) {}
    }
    

    这里是返回Promise的方法,

    private func asPromise(members: TCHMembers) -> Promise<TCHMemberPaginator> {
        return Promise { seal in
            members.members(completion: { (result, paginator) in
                if result == true, let p = paginator {
                    seal.fulfill(p)
                } else {
                    seal.reject(NSError())
                }
            })
        }
    }
    

    【讨论】:

    • 我在某处发现他们删除了对完成的支持,拒绝支持密封,这是我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2011-08-17
    • 2021-06-03
    • 2019-02-11
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多