PromiseKit ios Swift 闭包 return 类型问题

PromiseKit ios Swift closure return type issue

我在我的应用程序中使用 Promise Kit。我是 promise 工具包的新手。我实际上需要知道这个闭包是如何工作的。因此,如果有人可以用示例来解释这件事,那将非常有帮助。

我面临的问题是,尽管我正在 return 期望值,但我收到一条错误消息,指出无法转换 return 类型的表达式....

我想也许我理解错了。

这就是我使用承诺链的方式。

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

这就是我 return 从我的函数中得到的结果:

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