Swift @functionBuilder无法识别可变参数

时间:2019-11-15 15:03:25

标签: ios swift function-builder

我在项目中使用函数构建器,在实现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("") } } } 使其编译。

想法?

1 个答案:

答案 0 :(得分:0)

今天是Swift的限制。这就是为什么SwiftUI视图现在仅限于10个原因,并且您会在Combine框架中看到combineLatest3combineLatest4之类的方法。

According to the swift forums,可变函数生成器正在开发中,可能包含在Swift 6中。