ios - PromiseKit ios Swift 闭包返回类型问题
问题描述
我在我的应用程序中使用 Promise Kit。我是新来的承诺工具包。我需要知道这个闭包是如何工作的。因此,如果有人可以用示例来解释这件事,那将非常有帮助。
我面临的问题是,虽然我正在返回预期值,但我收到一条错误消息,指出无法转换类型的返回表达式...。
我想也许我在这里理解错了。
这就是我使用承诺链的方式。
Glyph().glyphs(book: self.downloadingBook!._id)
.then { glyphs -> Promise<[Glyph]> in
self.setProgress(progress: 0.07)
return Glyph().saveGlyphs(data: glyphs)
}.then { lines -> Promise<[Line]> in
self.setProgress(progress: 0.14)
return Line().lines(book: self.downloadingBook._id)
}.then { lines -> Promise<[Line]> in
self.setProgress(progress: 0.21)
return Line().saveLines(data: lines)
}.then { surahs -> Promise<[SurahGlyph]> in
self.setProgress(progress: 0.28)
return SurahGlyph().surahs(book: self.downloadingBook._id)
}.then { surahs -> Promise<[SurahGlyph]> in
self.setProgress(progress: 0.35)
return SurahGlyph().saveSurahGlyphs(data: surahs)
}.then { surahs -> Promise<[SurahGlyph]> in
self.setProgress(progress: 0.42)
return Translator().translators()
}.then { data -> Promise<[Translator]> in
self.setProgress(progress: 0.49)
return Translator().saveTranslators(translators: data)
}.then { data -> Promise<[Translator]> in
self.setProgress(progress: 0.56)
return Surah().getSurahs(translatorId: "ar.tazweed")
}.then { surahs -> Promise<[Surah]> in
self.setProgress(progress: 0.63)
return Surah().saveSurahs(surahs: surahs)
}.then { surahs -> Promise<[Surah]> in
self.setProgress(progress: 0.70)
Ayah().ayahs(page: 1)
}.then { ayahs -> Promise<[Ayah]> in
self.setProgress(progress: 0.77)
Ayah().saveAyahs(ayahs: ayahs)
return Promise.value(ayahs)
}.done { _ in
self.setProgress(progress: 1)
self.statusLabel.text = "Completed"
self.reloadBook()
}.catch { error in
print(error)
}
这就是我从函数中返回的方式:
func translators() -> Promise<[Translator]> {
do {
let realm = try Realm()
let translatorsInRealm = realm.objects(Translator.self)
if translatorsInRealm.count != 0 {
Promise.value(Array(translatorsInRealm))
} else {
return Promise<[Translator]> { seal in
let handler = RequestHandler()
let session = RequestHandler.alamofireManager
session.request(API.Quran.translatorsURL, method: .get, parameters: nil,
encoding: URLEncoding.default, headers: nil,
interceptor: handler).validate().response { (response) in
if response.result.isSuccess {
do {
let linesFromServer = try JSONDecoder().decode([Translator].self, from: response.data!)
seal.fulfill(linesFromServer)
} catch {
seal.reject(error)
}
} else {
seal.reject(response.error!)
}
}
}
}
} catch {
print("Unexpected error: \(error).")
}
return Promise.value([])
}
我得到的错误
解决方案
承诺值类型不匹配。校正后的链条将如下所示,
Glyph().glyphs(book: self.downloadingBook!._id)
.then { glyphs -> Promise<[Glyph]> in
self.setProgress(progress: 0.07)
return Glyph().saveGlyphs(data: glyphs)
}.then { lines -> Promise<[Line]> in
self.setProgress(progress: 0.14)
return Line().lines(book: self.downloadingBook._id)
}.then { lines -> Promise<[Line]> in
self.setProgress(progress: 0.21)
return Line().saveLines(data: lines)
}.then { surahs -> Promise<[SurahGlyph]> in
self.setProgress(progress: 0.28)
return SurahGlyph().surahs(book: self.downloadingBook._id)
}.then { surahs -> Promise<[SurahGlyph]> in
self.setProgress(progress: 0.35)
return SurahGlyph().saveSurahGlyphs(data: surahs)
}.then { surahs -> Promise<[Translator]> in
self.setProgress(progress: 0.42)
return Translator().translators()
}.then { data -> Promise<[Translator]> in
self.setProgress(progress: 0.49)
return Translator().saveTranslators(translators: data)
}.then { data -> Promise<[Surah]> in
self.setProgress(progress: 0.56)
return Surah().getSurahs(translatorId: "ar.tazweed")
}.then { surahs -> Promise<[Surah]> in
self.setProgress(progress: 0.63)
return Surah().saveSurahs(surahs: surahs)
}.then { surahs -> Promise<[Ayah]> in
self.setProgress(progress: 0.70)
return Ayah().ayahs(page: 1)
}.then { ayahs -> Promise<[Ayah]> in
self.setProgress(progress: 0.77)
Ayah().saveAyahs(ayahs: ayahs)
return Promise.value(ayahs)
}.done { _ in
self.setProgress(progress: 1)
self.statusLabel.text = "Completed"
self.reloadBook()
}.catch { error in
print(error)
}
推荐阅读
- javascript - 按下 ENTER 键时更改表单标签内的输入值
- python - 在 docker-py 中构建失败时如何获取日志?
- javascript - Vue:如何根据父数据渲染动态组件?
- ruby-on-rails - 向 has_many 关联添加默认排序可防止使用 AASM 的模型上的状态转换
- php - 选择当前用户的所有朋友的ID?
- java - 如何在 Mapbox SDK 的 LineString 上设置文本?
- python-3.x - PyCharm 看不到本地安装的包
- r - 从父环境调用缺少的参数
- spring-boot - 为什么 Spring Boot 有两种不同的 ReactiveX 实现?
- postgresql - io.crate.shade.org.postgresql.util.PSQLException:致命:用户“ABC”的信任身份验证失败