Why does it compile and work?
I can't find any info on this.

我给你举个例子.基于SWIFT语法库.

@CodeBlockItemListBuilder statementsBuilder: () -> CodeBlockItemListSyntax

所以,假设我们有一个函数,它有这样一个参数.该函数需要一个带有CodeBlockItems的闭包,因此ResultBuilder将构建CodeBlockItemList.

myFunction {
    item1
    item2
    item3
...
}

似乎我也可以将itemList(结果类型CodeBlockItemListSyntax的对象)传递给它:

myFunction {
    itemList
}

I don't understand why we're allowed to do that. Why does it work? How does it work?!
In fact, we even can mix Item with ItemList objects! But output is a little bit strange... which confuses me even more.

P.S.
Was pretty surprised that there still doesn't exist neither "result-builder" nor "swift-syntax" tags in StackOverFlow.

推荐答案

简单地说,CodeBlockItemListBuilder.buildExpression的超载需要CodeBlockItemListSyntax.请看documentation.

static func buildExpression(
    _ expression: CodeBlockItemListBuilder.FinalResult
) -> CodeBlockItemListBuilder.Component

CodeBlockItemListBuilder.FinalResultCodeBlockItemListSyntax的类型别名.

据推测,他们添加这个重载是因为向现有代码块添加新语句是一件很常见的事情,而这个重载使它更方便:

CodeBlockItemListSyntax {
    "print(\"a new statement!\")"
    someExistingCodeBlock
}

Swift相关问答推荐

MacOS 13-如何使用SwiftUI创建Message.App设置工具栏?

从`compactMap()`闭包返回`nil`未通过结果类型判断

可选,类似于自定义类型的初始化

无论玩家移动到视图内的哪个位置,如何使用 SpriteKit 让敌人向玩家emits 子弹?

PassthroughSubject 的 AsyncPublisher 值属性未生成所有值

将每个枚举 case 与 Swift 中的一个类型相关联

签署GoogleSignIn-GoogleSignIn需要开发团队

单击按钮后的计时器发布者初始化计时器

判断 Swift 程序是否正在输出到终端

我将哪种 Swift 数据类型用于货币

如何在 SwiftUI 中实现 PageView?

将if let与逻辑或运算符一起使用

Alamofire:如何全局处理错误

在 Swiftui 中是否有一种简单的方法可以通过捏合来放大图像?

UIButton 标题左对齐问题 (iOS/Swift)

在 Swift 中子类化 NSObject - 初始化器的最佳实践

Void 函数中意外的非 Void 返回值 (Swift 2.0)

将 UIImage 剪成圆形

转换为 swift 3 后,视图控制器中出现奇怪的通用函数

Swift - 要求实现协议的类是某个类的子类