PromiseKit在链接之前展开可选项

时间:2018-05-24 08:07:37

标签: swift promisekit

刚开始在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开始。或者如果没有图像,可能只返回空字符串?我在这里错过了什么?感谢

2 个答案:

答案 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'