swift2 不带参数的swift泛型函数

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

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

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

身体:

  1. {
  2. for name in (names ?? defaultNames)
  3. {
  4. let layer = type() //init a custom subclass of CALayer
  5. layer.name = name
  6. self.addSubLayer(layer)
  7. }
  8. }
qhhrdooz

qhhrdooz1#

请尝试以下操作:

  1. func addSublayers<T: CALayer>(names: [String]? = nil, asdf : T)
  2. {
  3. for name in names!
  4. {
  5. let layer = T() //init a custom subclass of CALayer
  6. layer.name = name
  7. self.addSubLayer(layer)
  8. }
  9. }

或此

  1. func addSublayers<T: CALayer>(names: [String]? = nil) ->T?
  2. {
  3. for name in names!
  4. {
  5. let layer = T() //init a custom subclass of CALayer
  6. layer.name = name
  7. self.addSubLayer(layer)
  8. }
  9. return nil
  10. }
展开查看全部
uqdfh47h

uqdfh47h2#

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

  1. func foo<T>(type: T.Type) {}
  2. func bar<T>(type: T.Type = String.self)
  3. {
  4. foo(type:type)
  5. }

此模式也用于标准库中。

相关问题