通常,函数不需要显式类型,因为它可以从上下文中推断类型:
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
:"error:无法在当前上下文中推断闭包参数'_‘的类型“,这也会将其更改为接受参数,这不是我想要的。let f = { Void -> Double in
:“错误:无法推断当前上下文中闭包参数'Void‘的类型”let f = { Never -> Double in
:“错误:无法在当前上下文中推断闭包参数‘从不’的类型”我能够让从句至尾使用它,但是如果无法使用这个语法为闭包定义一个显式返回类型,这似乎是一个冗长的疏忽。
let f = {
1 + 1
} as () -> Double
f()
如果闭包没有输入参数,如何为闭包定义显式返回类型(使用内联语法而不是as
)?
注意:如果另一个问题已经存在的话,我很乐意把它作为一个副本来结束。(我试着用术语explicit type annotation closure return only
搜索副本,但找不到任何相关的内容。)
发布于 2020-12-11 12:23:31
空元组()
表示空参数列表:
let f = { () -> Double in
1 + 1
}
print(f()) // 2.0
()
既可以是类型(与Void
相同),也可以是该类型的实例:
let a: Void = ()
let b: () = ()
print(type(of: a) == type(of: b)) // true
https://stackoverflow.com/questions/65258052
复制相似问题