Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中,可以将泛型子类与函数生成器一起使用吗?_Ios_Swift_Function Builder - Fatal编程技术网

Ios 在Swift中,可以将泛型子类与函数生成器一起使用吗?

Ios 在Swift中,可以将泛型子类与函数生成器一起使用吗?,ios,swift,function-builder,Ios,Swift,Function Builder,在使用函数生成器时,我无法将变量返回生成器闭包与子类化+泛型结合使用。在这里可以找到斯威夫特游乐场 首先,让我们定义函数生成器。在本例中,我将使用一个既支持数组+变量初始化,又支持泛型的函数: @_functionBuilder struct Builder<T> { static func buildBlock(_ items: T...) -> [T] { items } static func buildBlock(_ item

在使用函数生成器时,我无法将变量返回生成器闭包与子类化+泛型结合使用。在这里可以找到斯威夫特游乐场

首先,让我们定义函数生成器。在本例中,我将使用一个既支持数组+变量初始化,又支持泛型的函数:

@_functionBuilder struct Builder<T> {

    static func buildBlock(_ items: T...) -> [T] {
        items
    }

    static func buildBlock(_ items: [T]) -> [T] {
        items
    }
}
这项工作很好,编译和运行都没有问题。子类化与泛型相结合似乎会混淆编译器要使用哪个函数生成器初始化定义,返回数组的定义还是返回变量列表的定义


以前有人遇到过这个问题吗?

这个问题与泛型无关。此处发生的情况是,不会“继承”属性
@Builder
,因此有效地,
NavigationController
初始值设定项的形式如下:

init(builder: () -> [View]) {...}
您可以覆盖
init

final class NavigationController: Container<View> {
    override init(@Builder<View> builder: () -> [View]) {
        super.init(builder: builder)
    }
}
final类导航控制器:容器{
重写初始化(@Builder:()->[View]){
super.init(生成器:生成器)
}
}

感谢您提供文档链接!这很有效。
  class Nav {

      let views: [View]

      init(@Builder<View> builder: () -> [View]) {
          views = builder()
      }
  }

  let y = Nav {
      View()
  }
init(builder: () -> [View]) {...}
final class NavigationController: Container<View> {
    override init(@Builder<View> builder: () -> [View]) {
        super.init(builder: builder)
    }
}