PromiseKit 语法链 swift

Posted

技术标签:

【中文标题】PromiseKit 语法链 swift【英文标题】:PromiseKit Syntax Chain swift 【发布时间】:2015-10-26 19:44:25 【问题描述】:

我正在尝试在 Promise 工具包上链接一些 Promise,当 Promise 类型像这样 Promise<Location> 时出现语法问题,只有当 Promise 具有类型时,我才会收到编译器错误。我是使用 promisekit 的新手

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")
        
    

【问题讨论】:

请贴出你得到的编译错误。 另外你的第二个块应该返回一个 Location 对象。它不返回任何东西。 AppDelegate.swift:43:15: Cannot invoke 'then' with an argument list of type '((Location) -&gt; Location)',如何返回位置,语法是什么 【参考方案1】:

你不需要在你的块中返回:

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

【讨论】:

我仍然有语法错误ViewController.swift:35:74: Cannot invoke 'then' with an argument list of type '((_) -&gt; _)'我正在使用promise kit 2.2.1 你的 getLocation 方法返回 Promise&lt;Location&gt; 吗?【参考方案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")

【讨论】:

以上是关于PromiseKit 语法链 swift的主要内容,如果未能解决你的问题,请参考以下文章

自己的 Promisekit 承诺没有正确响应

PromiseKit 无法在链中命中

PromiseKit firstlyOn 样式方法

PromiseKit 没有回调/解除分配? (阿拉莫菲尔)

PromiseKit O-C 指南

PromiseKit pod 安装正确,但 import PromiseKit 返回错误?