没有参数的swift泛型函数

时间:2015-09-22 13:46:29

标签: generics swift2

如何在此代码段中指定子类? 它没有返回任何内容,因此编译器无法推断出类型。在没有编译器错误的情况下,我也不能调用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) 
  }
}

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

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
}

答案 1 :(得分:0)

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

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

这个模式也用在标准库中。