swift – 列出一个类的所有子类
发布时间:2020-12-14 05:43:43 所属栏目:百科 来源:网络整理
导读:我可以返回一个类的所有子类的列表吗?例如: class Mother {}class ChildFoo: Mother {}class ChildBar: Mother {}let motherSubclasses = ... // TODOprint(motherSubclasses) // should to return [ChildFoo.self,ChildBar.self] 令人惊讶的是,Objective-
我可以返回一个类的所有子类的列表吗?例如:
class Mother { } class ChildFoo: Mother { } class ChildBar: Mother { } let motherSubclasses = ... // TODO print(motherSubclasses) // should to return [ChildFoo.self,ChildBar.self]
令人惊讶的是,Objective-C运行时函数与Swift类一样工作,即使它们不是NSObject的子类.此外,Swift中的所有类似乎都是从SwiftObject派生的. SwiftObject本身没有超类.
首先,一个处理ObjC运行时函数的包装器结构: import Foundation struct ClassInfo : CustomStringConvertible,Equatable { let classObject: AnyClass let className: String init?(_ classObject: AnyClass?) { guard classObject != nil else { return nil } self.classObject = classObject! let cName = class_getName(classObject)! self.className = String(cString: cName) } var superclassInfo: ClassInfo? { let superclassObject: AnyClass? = class_getSuperclass(self.classObject) return ClassInfo(superclassObject) } var description: String { return self.className } static func ==(lhs: ClassInfo,rhs: ClassInfo) -> Bool { return lhs.className == rhs.className } } 以下是如何使用它: class Mother { } class ChildFoo: Mother { } class ChildBar: Mother { } class AnIrrelevantClass { } let motherClassInfo = ClassInfo(Mother.self)! var subclassList = [ClassInfo]() var count = UInt32(0) let classList = objc_copyClassList(&count)! for i in 0..<Int(count) { if let classInfo = ClassInfo(classList[i]),let superclassInfo = classInfo.superclassInfo,superclassInfo == motherClassInfo { subclassList.append(classInfo) } } print(subclassList) 这只会进行浅层搜索,因此它不会扫除孙子类,但你明白了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |