刚开始在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开始。或者如果没有图像,可能只返回空字符串?我在这里错过了什么?感谢
答案 0 :(得分:0)
任何想法如何才能使用setImage方法启动链 有传递的图像?
您可以使用后卫语句检查图片是否为零。如果为nil,则执行返回所需的代码。如果没有,请使用扭曲的图像继续流程。
func addModel(_ model: Model, image: UIImage?, completion: @escaping (Error?) -> Void) {
var modelToSet = model
var id = ""
guard let image = image else {
// insert code to return if needed
return
}
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)
}
}
答案 1 :(得分:0)
在询问PromiseKit社区后,我得到了我需要的东西。因此,您可以使用本地函数解决问题:
git commit -m 'I did something'