0x7fs
5/5/2015 - 5:50 PM

Missing NSObject introspection methods. isStrictSubclassOfClass(), isStrictSuperclassOfClass() and isSuperclassOfClass()

Missing NSObject introspection methods. isStrictSubclassOfClass(), isStrictSuperclassOfClass() and isSuperclassOfClass()

extension NSObject {
    class func isStrictSubclassOfClass(aClass: AnyClass) -> Bool {
        return isSubclassOfClass(aClass) && self !== aClass.self
    }
    
    class func isStrictSuperclassOfClass(aClass: AnyClass) -> Bool {
        return isSuperclassOfClass(aClass) && self !== aClass.self
    }
    
    class func isSuperclassOfClass(aClass: AnyClass) -> Bool {
        return aClass.isSubclassOfClass(self)
    }
}

UIView().isMemberOfClass(UIView) // true
UIImageView().isMemberOfClass(UIView) // false
NSObject().isMemberOfClass(UIView) // false

UIView().isKindOfClass(UIView) // true
UIImageView().isKindOfClass(UIView) // true
NSObject().isKindOfClass(UIView) // false

UIView.isSubclassOfClass(UIView) // true
UIImageView.isSubclassOfClass(UIView) // true
NSObject.isSubclassOfClass(UIView) // false

UIView.isStrictSubclassOfClass(UIView) // false
UIImageView.isStrictSubclassOfClass(UIView) // true
NSObject.isStrictSubclassOfClass(UIView) // false

UIView.isSuperclassOfClass(UIView) // true
UIImageView.isSuperclassOfClass(UIView) // false
NSObject.isSuperclassOfClass(UIView) // true

UIView.isStrictSuperclassOfClass(UIView) // false
UIImageView.isStrictSuperclassOfClass(UIView) // false
NSObject.isStrictSuperclassOfClass(UIView) // true