当前位置: 首页 > 面试题库 >

单行闭包,无返回类型

呼延宪
2023-03-14
问题内容

在Swift中,如果闭包仅包含单个语句,它将自动返回从该单个语句返回的值。

并非在所有情况下都感觉很自然。让我们看一个例子:

func StringReturningFunc() -> String {
    return "Test String"
}

// Error: Cannot convert the expressions type '() -> $T0' to type 'String'
let closure: () -> () = {
    StringReturningFunc()
}

如您所见,即使闭包只应调用一个简单函数,它也会尝试自动返回其返回值,该返回值的类型为String,与返回类型不匹配void

我可以通过实现闭包主体来避免这种情况:

let _ = StringReturningFunc()

感觉非常奇怪。

有没有更好的方法可以做到这一点,或者这仅仅是我必须忍受的东西?


问题答案:

发生这种情况的原因是单行表达式闭包的简写。闭包编写时有一个隐式的“返回”。

let closure: () -> () = {
    StringReturningFunc()
    return
}

这样写应该可以



 类似资料:
  • 闭包作为参数(Taking closures as arguments) 现在我们知道了闭包是 trait,我们已经知道了如何接受和返回闭包;就像任何其它的 trait! 这也意味着我们也可以选择静态或动态分发。首先,让我们写一个获取可调用结构的函数,调用它,然后返回结果: fn call_with_one<F>(some_closure: F) -> i32 where F : Fn(i

  • 问题内容: 更新2: 那么这是它可以获得的最优化的吗? 更新1: 我知道我可以给sql查询增加限制,但是我也想摆脱foreach循环,这是我不应该需要的。 原始问题: 我有以下脚本,由于“ foreach”部分的缘故,它是从数据库返回许多行的良好IMO。 如果我知道我将总是只从数据库中获得1行,该如何优化它。如果我知道我只会从数据库中获得1行,我不明白为什么需要foreach循环,但是我不知道如何

  • 我刚开始学Java。下面是我尝试在Intellij上运行的代码。我没想到下面的代码在执行时会有问题,因为我复制和粘贴的代码100%相似。从学习材料中可以看出,它应该工作得很顺利。我想知道这里出了什么问题?谢谢,我希望有人能向我澄清。

  • 问题内容: 从以下代码 如果我添加一个return语句,它将起作用,并且错误消失了 任何建议都不确定如何在没有虚拟return语句的情况下处理上述问题。 这是我的课程测试 编辑 我已经完成了一个基于操场的简约示例(请复制粘贴以进行测试) 问题答案: 任何建议都不确定如何在没有虚拟return语句的情况下处理上述问题。 您已经很好地解决了问题。匿名函数自动使用单行函数主体作为返回值,因此,要防止这种

  • 函数缺少结束返回语句,返回类型不包括“undefined”。 在以下异步等待函数中,我的返回类型为

  • 在一个使用vanilla JS的项目中,我有一个相当复杂的用例,它使用检查类型,并用JSDoc注释编写类型注释。我有一个返回函数的函数,返回的函数可以递归调用自己,同时也重新分配一些闭包变量。 这是一个愚蠢的例子,它明白了这一点并会抛出同样的错误: 因此,如果我使用对此代码运行类型检查: 我得到以下错误: 首先,这个错误似乎相当错误。我显然有一个显式的返回类型注释,这是使用适当的TypeScrip