swift2 不带参数的swift泛型函数

ecfdbz9o  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(159)

我如何在这个代码段中指定子类?它没有返回任何东西,所以编译器没有任何东西来推断类型。我也不能在没有编译器错误的情况下调用root.addSublayers([“a”,“b”])。
可能功能:

func addSublayers(names: [String]? = nil, ofSubType type:???)
func addSublayers<type: CALayer>(names: [String]? = nil)

身体:

{
  for name in (names ?? defaultNames)
  {
     let layer = type() //init a custom subclass of CALayer
     layer.name = name
     self.addSubLayer(layer) 
  }
}
qhhrdooz

qhhrdooz1#

请尝试以下操作:

func addSublayers<T: CALayer>(names: [String]? = nil, asdf : T)
{
    for name in names!
    {
        let layer = T() //init a custom subclass of CALayer
        layer.name = name
        self.addSubLayer(layer)
    }
}

或此

func addSublayers<T: CALayer>(names: [String]? = nil) ->T?
{
    for name in names!
    {
        let layer = T() //init a custom subclass of CALayer
        layer.name = name
        self.addSubLayer(layer)
    }
    return nil
}
uqdfh47h

uqdfh47h2#

如果有人遇到这个问题,这里是我目前使用的模式。

func foo<T>(type: T.Type) {}
func bar<T>(type: T.Type = String.self) 
{
    foo(type:type)
}

此模式也用于标准库中。

相关问题