为什么它能编译并运行?
我找不到任何这方面的信息。
我给你举个例子。基于 SwiftSyntax 库。
@CodeBlockItemListBuilder statementsBuilder: () -> CodeBlockItemListSyntax
所以,假设我们有一个带有这样参数的函数。该函数需要使用 CodeBlockItems 进行闭包,并且 resultBuilder 将构建 CodeBlockItemList 作为结果。
myFunction {
item1
item2
item3
...
}
看来我CodeBlockItemListSyntax
也可以将 itemList (结果类型的对象)传递给它:
myFunction {
itemList
}
我不明白为什么我们被允许这样做。为什么它有效?它是如何工作的?!
事实上,我们甚至可以将 Item 与 ItemList 对象混合使用!但输出有点奇怪......这让我更加困惑。
PS
非常惊讶的是,StackOverFlow 中仍然不存在“结果构建器”和“swift-syntax”标签。
这只是一个重载,
CodeBlockItemListBuilder.buildExpression
需要一个CodeBlockItemListSyntax
. 请参阅文档。CodeBlockItemListBuilder.FinalResult
是 的类型别名CodeBlockItemListSyntax
。据推测,他们添加此重载是因为向现有代码块添加新语句是常见的事情,并且此重载使其更加方便: