2015-10-26 71 views
1

我試圖鏈接承諾的一些承諾套件,我有語法問題,當承諾類型是這樣的Promise<Location>,只有當承諾有一個類型我得到編譯器錯誤。我是新使用promisekitPromiseKit語法鏈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'',如何返回位置,語法是什麼 –

回答

0

你並不需要在你的塊一回:

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

我仍然有語法錯誤'ViewController.swift:35:74:無法用類型'((_) - > _')的參數列表調用'then''我正在使用promise套件2.2.1 –

+0

您的'''getLocation' '方法返回'''Promise '''? –

0

有一些問題在這裏。

  1. 你沒有鏈接,因爲你沒有回報你的承諾。
  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") 
}