通常函数不需要显式类型,因为它可以从上下文推断类型:
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