【发布时间】:2020-02-13 00:43:07
【问题描述】:
我有一个函数构建器
@_functionBuilder
struct MyBuilder {
static func buildBlock(_ numbers: Int...) -> Int {
var result = 0
for number in numbers {
result += number * 2
}
return result
}
}
功能
func myFunc(@MyBuilder builder: () -> Int) -> Int {
builder()
}
使用
let a = myFunc {
10
20
}
print(a) // print 60 is work!
但是
let b = myFunc {
10
}
print(b) // print 10?
为什么 b 不是 20?
我尝试添加其他 buildBlock
static func buildBlock(number: Int) -> Int {
return number * 2
}
但不工作:(
有什么想法吗?
【问题讨论】:
-
有趣的问题,我试图让它工作,但我也失败了:) 事实上,你可以将
buildBlock的实现更改为一行:numbers.reduce(0, { $0 + $1 * 2 })。