当只有一个值时,Function Builder 不工作?
Function Builder not working when only one value?
我有一个 functionBuilder
@_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
}
但不工作:(
有什么想法吗?
Any idea?
失败案例中发生的事情是 { 10 }
直接被视为类型 () -> Int
的闭包,编译器似乎根本没有考虑函数构建器。生成的代码只是一个 returns 10
.
的函数
这似乎是 "feature",其中将 { 10 }
识别为简单闭包会覆盖其可能识别为函数构建器的使用。这可能只是一个编译器问题,或者更糟的是它可能是一个语言定义问题...
请前往 feedbackassistant.apple.com 并提交报告。
接受的答案是正确的,它只是传递值而忽略构建器。
已在 Swift 5.3 上修复,仅在 Xcode 12(目前处于测试阶段)上可用。
我有一个 functionBuilder
@_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
}
但不工作:(
有什么想法吗?
Any idea?
失败案例中发生的事情是 { 10 }
直接被视为类型 () -> Int
的闭包,编译器似乎根本没有考虑函数构建器。生成的代码只是一个 returns 10
.
这似乎是 "feature",其中将 { 10 }
识别为简单闭包会覆盖其可能识别为函数构建器的使用。这可能只是一个编译器问题,或者更糟的是它可能是一个语言定义问题...
请前往 feedbackassistant.apple.com 并提交报告。
接受的答案是正确的,它只是传递值而忽略构建器。
已在 Swift 5.3 上修复,仅在 Xcode 12(目前处于测试阶段)上可用。