我在项目中使用函数构建器,在实现buildIf
时遇到问题。这是建造者:
@_functionBuilder
class TableSectionBuilder {
static func buildBlock(_ children: TableGroup...) -> [TableGroup] {
children
}
static func buildBlock(_ children: [TableGroup]...) -> [TableGroup] {
children.flatMap { $0 }
}
static func buildExpression(_ child: TableGroup) -> [TableGroup] {
[child]
}
static func buildIf(_ children: [TableGroup]?) -> [TableGroup] {
return children ?? []
}
}
这是我想如何使用它的一个示例(注意:Text
是一个自定义对象,类似于SwiftUI
的{{1}})
Text
不幸的是,尽管编译了,但它没有编译:
func test() {
Self.section(identifier: "") {
Text("")
Text("")
if true {
Text("")
}
}
}
在我看来,函数生成器无法正确地从数组映射到可变的项目列表。同样,在第一个示例中删除func test() {
Self.section(identifier: "") {
[Text(""),
Text("")]
if true {
Text("")
}
}
}
使其编译。
想法?
答案 0 :(得分:0)
今天是Swift的限制。这就是为什么SwiftUI视图现在仅限于10个原因,并且您会在Combine框架中看到combineLatest3
和combineLatest4
之类的方法。
According to the swift forums,可变函数生成器正在开发中,可能包含在Swift 6中。