整齐的方法签名,用于查找给定类型的子类

时间:2015-11-02 10:53:10

标签: swift generics

我有一个已经实现的方法,但是我很难让方法签名变得优雅。

该方法返回所有类,这些类是指定类的子类。我当前的方法签名如下:

AnyClass

这很好,除了返回类型是allSubClassesOf(UIView).forEach { (subclass:AnyClass) in UIView *sigh = subclass as! UIView //!< Gross and unnecessary ... } ,这意味着我总是得到这样一个混乱的演员:

public func allSubclassesOf<T>() -> [T]

这似乎是仿制药应该能够解决的问题:)

我尝试的事情:

extension NSObject {
    class func allSubclasses() -> [Self]
}

不,你不允许在这样的函数中添加泛型。

llX

不,自己不在这里。

有谁知道如何将类型传递给此方法并让编译器知道返回数组将保持的类型;不需要演员吗?

1 个答案:

答案 0 :(得分:1)

我不确定您的方法的实现,但您需要执行以下操作。

我在这里做的是将泛型类型应用于方法函数,然后说我希望将对象类型作为参数并在数组中返回该类型的实例。

您可以将其添加为扩展程序,但是如果没有更多代码示例,我将无法继续帮助

func subclasses<T>(type: T.Type) -> [T] {
  ....
}

subclasses(UIView).forEach { (view: UIView) in
  print(view)
}