gpt4 book ai didi

swift - 为什么在 Swift 的单数 return 表达式中使用闭包速记变量必须是详尽无遗的?

转载 作者:搜寻专家 更新时间:2023-11-01 06:16:46 25 4
gpt4 key购买 nike

以下代码在 Swift 中是错误的。

func foo(closure: (Int, Int) -> Int) -> Int {
return closure(1, 2)
}

print(foo(closure: {$0}))

func foo(closure: (Int, Int) -> Int) -> Int {
return closure(1, 2)
}

print(foo(closure: {return $0}))

XCode playground 给出的错误是 Cannot convert value of type '(Int, Int)' to closure result type 'Int'

虽然下面的代码完全没问题。

func foo(closure: (Int, Int) -> Int) -> Int {
return closure(1, 2)
}

print(foo(closure: {$0 + $1}))

func foo(closure: (Int, Int) -> Int) -> Int {
return closure(1, 2)
}
print(foo(closure: {$1; return $0}))

func foo(closure: (Int, Int) -> Int) -> Int {
return closure(1, 2)
}

print(foo(closure: {a, b in a}))

似乎在闭包的参数由速记参数名称引用的情况下,如果闭包的主体仅由返回表达式组成,则必须详尽地使用它们。为什么?

最佳答案

如果你只使用$0,闭包参数被假定为一个元组而不是多个变量$0$1等。所以你应该能够通过提取该元组的第一个值来解决这个问题:

print(foo(closure: {$0.0}))

关于swift - 为什么在 Swift 的单数 return 表达式中使用闭包速记变量必须是详尽无遗的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com