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