我很快就是新人。让'试着理解seq#
声明一个类似闭包的函数:
closures
无法推断闭包返回当前上下文的类型() - >()
我的问题是这里的背景是什么?
let sayHello = {
return "hello"
}
老实说,我不明白这个错误?任何人都可以帮助我理解,为什么需要指定这一个函数产生预期类型的"字符串" ,你的意思是用()
来称呼它
let sayHello : String = {
return "hello"
}
然而,。这工作正常,没有错误,它被称为闭包
()
谢谢
答案 0 :(得分:1)
错误消息引用的上下文表示闭包的初始化语句及其周围。
Swift通常可以推断(从它已经知道的东西中找出)闭包的类型,而不需要你明确地指定它。
例如,如果您正在调用一个以Int
作为参数的闭包的函数,Swift会发现闭包的参数类型必须是Int
。类似地,如果闭包返回一个类型为String
的捕获局部变量,则Swift不需要您指定返回类型,因为它也必须为String
。
当您为将来使用创建闭包并将它们分配给变量时,这些都不起作用。在这种情况下,你需要告诉Swift你正在创建什么样的闭包:
let sayHello : ()->String = {
return "hello"
}
现在你有一个类型为&#34的变量sayHello
;一个不带参数的闭包并返回String
" (即()->String
关闭)。你可以稍后再打个电话打个招呼:
let hello = sayHello()
注意:您的例子"工作"还定义了一个闭包。但是,闭包在定义后立即使用,然后丢弃。