我有一个已实现的方法,但无法使方法签名变得优雅。
该方法返回指定类的子类的所有类。我当前的方法签名如下所示:
public func allSubclassesOf(baseClass: AnyClass) -> [AnyClass]
这很好,除了返回类型是 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]
}
不,Self 在这里不可用。
有谁知道我如何将类型传递给此方法并让编译器知道返回数组将包含什么类型;不需要类型转换?
最佳答案
我不确定您的方法的实现,但您需要执行以下操作。
我在这里所做的是将泛型类型应用于方法函数,然后说我希望对象类型作为参数并在数组中返回该类型的实例。
您可以将其添加为扩展,但是如果您的代码没有更多示例,我将无能为力
func subclasses<T>(type: T.Type) -> [T] {
....
}
subclasses(UIView).forEach { (view: UIView) in
print(view)
}
关于swift - 用于查找给定类型的子类的整洁方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475910/