8

我是 Swift 中的 Promise 的新手,我使用 PromiseKit 尝试在操场上创建一个非常简单的响应并尝试使用它。我有以下代码:

import UIKit
import PromiseKit

func foo(_ error: Bool) -> Promise<String> {
  return Promise { fulfill, reject in
    if (!error) {
      fulfill("foo")
    } else {
      reject(Error(domain:"", code:1, userInfo:nil))
    }
  }
}

foo(true).then { response -> String in {
  print(response)
  }
}

但是我收到以下错误:

error: MyPlayground.playground:11:40: error: cannot convert value of type '() -> ()' to closure result type 'String'
foo(true).then { response -> String in {
4

1 回答 1

4

抛出错误是因为您传递给的闭包then声称返回 a String,但从未返回过这样的值。除非您打算String在该闭包的某个地方返回 a,否则您需要将闭包的返回类型更改为Void,如下所示:

foo(true).then { response -> Void in
    print(response)
}

请注意,具有返回类型的闭包Void可以省略其返回类型。此外,您的问题中的代码中有一个无关紧要的内容{(我假设这在您的实际代码中不存在,因为它可以编译)。

除了这个问题之外,Error没有可访问的初始化程序 - 您在代码中使用的初始化程序实际上属于NSError,因此您的reject调用需要如下所示:

reject(NSError(domain:"", code:1, userInfo:nil))
于 2017-07-01T21:32:00.190 回答