在Swift中,为有返回值但没有输入参数的闭包添加内联显式类型注释



通常函数不需要显式类型,因为它可以从上下文推断类型:

let f = { input in
1 + input
}
f(2)

通常,您需要提供一个显式类型注释来强制它使用特定类型,或者在编译器无法推断类型的情况下。当你有一个输入参数时,这很简单:

let f = { (input: Double) -> Double in
1 + input
}
f(2)

然而,如果您没有输入参数,我不确定语法应该是什么样子:

let f = { -> Double in
1 + 1
}
f()

错误:需要表达式

我尝试了所有这些变体,但都无济于事:

  • let f = { -> Double in:";错误:应为表达式">
  • CCD_ 2:";错误:无法在当前上下文中推断闭包参数"_"的类型";,这也改变了它以接受一个论点,这不是我想要的
  • CCD_ 3:";错误:无法在当前上下文中推断闭包参数"Void"的类型
  • CCD_ 4:";错误:无法在当前上下文中推断闭包参数'Never'的类型">

我可以通过在末尾添加as子句来实现它,但如果无法使用此语法仅定义闭包的显式返回类型,那么这似乎很冗长,就像是一种疏忽。

let f = {
1 + 1
} as () -> Double
f()

如果闭包没有输入参数,我该如何定义它的显式返回类型(使用内联语法而不是as(?


注意:如果已经存在另一个问题,我很乐意将其作为副本关闭。(我尝试使用术语explicit type annotation closure return only搜索重复项,但找不到任何相关内容。(

空元组()表示一个空参数列表:

let f = { () -> Double in
1 + 1
}
print(f()) // 2.0

()既可以是类型(与Void相同(,也可以是该类型的实例

let a: Void = ()
let b: () = ()
print(type(of: a) == type(of: b)) // true

相关内容

  • 没有找到相关文章

最新更新