错误:无法使用 Swift + PromiseKit 将类型 '() -> ()' 的值转换为闭包结果类型 'String'

Joh*_*ike 8 xcode swift promisekit

我是 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)
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

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

aap*_*ath 6

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

\n\n
foo(true).then { response -> Void in\n    print(response)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
reject(NSError(domain:"", code:1, userInfo:nil))\n
Run Code Online (Sandbox Code Playgroud)\n