2015-10-26 6 views
1

Я пытаюсь связать некоторое обещание по набору обещаний, у меня проблема синтаксиса, когда тип обещания похож на этот Promise<Location>, только когда у обещания есть тип, я получаю ошибку компилятора. Я новичок в использовании promisekitPromiseKit Синтаксис Chain swift

Swift.start(host,"","").then{ result -> Void in 

    }.then{ obj -> Void in 
     println(obj) 
     Swift.getCurrent.then{ obj -> Void in 
      let payload:Dictionary<String,AnyObject> = obj as! Dictionary<String,AnyObject> 
      self.deviceUUID = payload["uuid"] as! String 

     } 
    }.then { obj -> Location in 
     println(obj) 
     Swift.getLocation("3333").then{ location in 
      self.locationUUID = location.get("uuid") 
     } 
    } 
+0

Пожалуйста, разместите ошибку компиляции, которую вы получите. –

+0

Также ваш второй блок должен вернуть объект Location. Он ничего не возвращает. –

+0

'AppDelegate.swift: 43: 15: Невозможно вызывать 'then' с помощью списка аргументов типа '((Location) -> Location)'', как я могу вернуть местоположение, какой будет синтаксис –

ответ

0

Вам не нужен возврат в вашем блоке:

.then { obj -> Location in 
     Swift.getLocation("433434").then{ location in 
      self.locationUUID = location.get("uuid") 
     } 
} 
+0

У меня все еще есть синтаксис error 'ViewController.swift: 35: 74: Невозможно вызвать« then »с помощью списка аргументов типа» ((_) -> _) »« Я использую комплект обещаний 2.2.1 –

+0

Делает ли ваш '' 'getLocation'' 'method return' '' Promise '' '? –

0

Есть целый ряд вопросов здесь.

  1. Вы не цепляетесь, потому что вы не возвращаете свое обещание.
  2. Вы не возвращаются в 2 закрытия, это ошибка компиляции, укупорочное говорит, что это возвращает Location но закрытие возвращает Void

.

Swift.start(host, "", "").then { result -> Void in 

}.then { obj -> Promise<Something> in 
    print(obj) 

    // I changed the return of this closure, see above 
    // we must return the promise or we are not chaining 
    return Swift.getCurrent.then { obj -> Void in 
     let payload: Dictionary<String, AnyObject> = obj as! Dictionary<String, AnyObject> 
     self.deviceUUID = payload["uuid"] as! String 

    } 
}.then { obj -> Location in 
    println(obj) 

    // we promised a return value above, so we must return 
    return Swift.getLocation("3333").then { location in 
     self.locationUUID = location.get("uuid") 
    } 
} 

Однако, глядя на ваш код, кажется неправильным, это на самом деле то, что вы после?

firstly { _ -> Promise<[String: AnyObject]> in 
    return Swift.getCurrent 
}.then { payload -> Promise<Location> in 
    self.deviceUUID = payload["uuid"] as! String 
    return Swift.getLocation("3333") 
}.then { location -> Void in 
    self.locationUUID = location.get("uuid") 
} 
Смежные вопросы