error: cannot convert value of type '() -> ()' to closure result type 'String' using Swift + PromiseKit

error: cannot convert value of type '() -> ()' to closure result type 'String' using Swift + PromiseKit

我是 Swift 中的承诺新手,使用 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 {

抛出错误是因为您传递给 then 的闭包声称是 return 一个 String,但从来没有 return 编辑过这样的值。除非你计划在那个闭包的某处 returning 一个 String,否则你需要将闭包的 return 类型更改为 Void,如下所示:

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

请注意,return 类型 Void 的闭包可以省略其 return 类型。另外,你的问题代码中有一个无关的 { (我假设这在你的实际代码中不存在,因为它编译)。

除此问题外,Error 没有可访问的初始化程序——您在代码中使用的初始化程序实际上属于 NSError,因此您的 reject 调用需要看起来像:

reject(NSError(domain:"", code:1, userInfo:nil))