swift中的上下文是什么?

时间:2016-09-25 18:00:58

标签: swift swift2 swift3

我很快就是新人。让'试着理解seq#
声明一个类似闭包的函数:

closures
  

无法推断闭包返回当前上下文的类型() - >()

我的问题是这里的背景是什么?

let sayHello = {
  return "hello"
}
  

函数产生预期类型的​​"字符串" ,你的意思是用()

来称呼它
老实说,我不明白这个错误?任何人都可以帮助我理解,为什么需要指定这一个let sayHello : String = { return "hello" }

然而,

。这工作正常,没有错误,它被称为闭包

()

谢谢

1 个答案:

答案 0 :(得分:1)

错误消息引用的上下文表示闭包的初始化语句及其周围。

Swift通常可以推断(从它已经知道的东西中找出)闭包的类型,而不需要你明确地指定它。

例如,如果您正在调用一个以Int作为参数的闭包的函数,Swift会发现闭包的参数类型必须是Int。类似地,如果闭包返回一个类型为String的捕获局部变量,则Swift不需要您指定返回类型,因为它也必须为String

当您为将来使用创建闭包并将它们分配给变量时,这些都不起作用。在这种情况下,你需要告诉Swift你正在创建什么样的闭包:

let sayHello : ()->String = {
    return "hello"
}

现在你有一个类型为&#34的变量sayHello;一个不带参数的闭包并返回String" (即()->String关闭)。你可以稍后再打个电话打个招呼:

let hello = sayHello()

注意:您的例子"工作"还定义了一个闭包。但是,闭包在定义后立即使用,然后丢弃。