PromiseKit обертывание внешнего закрытия в Promises
Я использую внешнюю библиотеку в Swift, поэтому я не могу контролировать операторы return. Насколько я понимаю, я должен обернуть эти возвраты в обещания, чтобы использовать PromiseKit. Это правильно?
Предполагая, что у меня есть рабочий код следующим образом:
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 ответ
Предполагая, что TCHMemberPaginator
а также TCHMembers
как показано ниже,
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())
}
})
}
}