PromiseKit IOS Swift закрытие тип возврата проблема - PullRequest
1 голос
/ 09 апреля 2019

Я использую 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([])
    }

Ошибки, которые я получаю

Errors i am getting

1 Ответ

0 голосов
/ 09 апреля 2019

Несоответствие типов значений обещаний.Исправленная цепочка будет выглядеть так:

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