通常一个函数不需要显式类型,因为它可以从上下文推断类型:
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
:“错误:预期的表达”let f = { _ -> Double in
:“错误:无法在当前上下文中推断闭包参数'_'的类型”,这也将其更改为接受一个参数,这不是我想要的。let f = { Void -> Double in
:“错误:无法在当前上下文中推断闭包参数'Void'的类型”let f = { Never -> Double in
:“错误:无法在当前上下文中推断闭包参数‘从不’的类型”
我可以通过在末尾添加一个as
子句来使其工作,但是如果无法使用这种语法为闭包定义一个显式的返回类型,这似乎很冗长并且像是一种疏忽。
let f = {
1 + 1
} as () -> Double
f()
as
如果没有输入参数,如何为闭包定义显式返回类型(使用内联语法而不是)?
注意:如果已经存在另一个问题,我很乐意将其作为重复项关闭。(我尝试使用这些术语搜索重复项explicit type annotation closure return only
,但找不到任何相关内容。)