iam*_*mnp 1 xcode objective-c ios swift swift-playground
为什么这段代码编译(在Playground中):
func text (f: String -> Void) {
f("text")
}
func foo(s: String) {
countElements(s)
}
text() {
s in
foo(s)
}
Run Code Online (Sandbox Code Playgroud)
而这个不是:
func text (f: String -> Void) {
f("text")
}
func foo(s: String) {
countElements(s)
}
text() {
s in
countElements(s)
}
Run Code Online (Sandbox Code Playgroud)
有错误消息:
Cannot convert the expression's type '(($T3) -> ($T3) -> $T2) -> (($T3) -> $T2) -> $T2' to type '_BuiltinIntegerLiteralConvertible'
Run Code Online (Sandbox Code Playgroud)
我可以说有返回类型的东西,有点Swift认为我想返回int但我只想打印它
如果添加显式return语句,则第二个版本的代码可以正常工作:
text() {
s in countElements(s)
return
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况的原因是它使用隐式返回,作为单个语句闭包,因此它尝试使用返回值countElements,该值与预期的返回类型不匹配Void.显而易见的return修复.
至于为什么它以不同的方式运行,在前一种情况下foo隐式返回Void,它匹配闭包返回类型.
更多信息:单表达式闭包的隐式返回
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |