gpt4 book ai didi

swift - PromiseKit 在链接之前解包可选

转载 作者:行者123 更新时间:2023-11-28 14:41:32 25 4
gpt4 key购买 nike

刚开始在 Swift 中使用 PromiseKit 6。我检查了一些示例并阅读了文档。我有一个看似微不足道的场景,但我无法绕过它。我有以下场景:

func addModel(_ model: Model, image: UIImage?, completion: @escaping (Error?) -> Void) {
var modelToSet = model
var id = ""

firstly {
serviceWrapper.setImage(image!)
}.map { path in
modelToSet.imagePath = path
}.then { [serviceWrapper]
serviceWrapper.setModel(modelToSet)
}.map { documentId in
id = documentId
}.then {
CLLocationManager.promise()
}.done { [serviceWrapper] location in
serviceWrapper.setLocation(GeoPoint(latitude: location.lat, longitude: location.long), id: id)
}.catch { error in
completion(error)
}
}

如您所见,在此伪代码中,我强制展开图像。有什么想法只有在传递图像时才可以使用 setImage 方法启动链吗?否则直接从 setModel 开始。或者如果没有图像可能只是返回空字符串?我在这里错过了什么?

最佳答案

在询问 PromiseKit 社区后,我得到了我需要的东西。所以这就是您可以使用本地函数解决它的方法:

func addModel(_ model: Model, image: UIImage?, completion: @escaping (Error?) -> Void) {
var modelToSet = model
var id = ""

func start() -> Promise<Void> {
guard let image = image else {
return Promise()
}
return serviceWrapper.uploadImage(image).map { path in
dishToSet.imagePath = path
}
}

firstly {
start()
}.then { [serviceWrapper]
serviceWrapper.setModel(modelToSet)
}.map { documentId in
id = documentId
}.then {
CLLocationManager.promise()
}.done { [serviceWrapper] location in
serviceWrapper.setLocation(GeoPoint(latitude: location.lat, longitude: location.long), id: id)
}.catch { error in
completion(error)
}
}

关于swift - PromiseKit 在链接之前解包可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com