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)
}
我在我的应用程序中使用 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)
}