首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将内联显式类型注释添加到带有返回值但没有Swift中的输入参数的闭包中?

将内联显式类型注释添加到带有返回值但没有Swift中的输入参数的闭包中?
EN

Stack Overflow用户
提问于 2020-12-11 12:17:10
回答 1查看 622关注 0票数 4

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let f = { input in
  1 + input
}
f(2)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let f = { (input: Double) -> Double in
  1 + input
}
f(2)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:“错误:无法在当前上下文中推断闭包参数‘从不’的类型”

我能够让从句至尾使用它,但是如果无法使用这个语法为闭包定义一个显式返回类型,这似乎是一个冗长的疏忽。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let f = {
  1 + 1
} as () -> Double
f()

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

注意:如果另一个问题已经存在的话,我很乐意把它作为一个副本来结束。(我试着用术语explicit type annotation closure return only搜索副本,但找不到任何相关的内容。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-11 12:23:31

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let f = { () -> Double in
  1 + 1
}

print(f()) // 2.0

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let a: Void = ()
let b: () = ()
print(type(of: a) == type(of: b)) // true
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65258052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文