swift - 用于查找给定类型的子类的整洁方法签名

标签 swift generics

我有一个已实现的方法,但无法使方法签名变得优雅。

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

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/

相关文章:

swift - 如何将类型应用于 NSFetchRequest 实例?

java - 类对象的泛型

c# - 将分号分隔的字符串解析为通用列表<T>

java - 如何在 C++ 中实现 MyClass<T extends OtherClass>?

java - 为什么我不能将 T 类型的对象传递给 < 类型对象的方法?延伸 T>?

ios - 为什么要减去数组中的某个项目而不是添加它?

swift - 如何为 SequenceType 实现通用求和函数,其中 Generator.Element 的类型为 Int

ios - 为 UIWebkit 赋予 Value 并更改实例化 ViewController [Swift 4]

java - 我们可以使用泛型参数动态调用 Java 接口(interface)方法吗?

swift - Smashtag(Stanford CS193p Twitter 客户端)未在 iPhone 上加载