我有一个Swift类Parent
,它有一个方法doSomething()
,我想检测(在Parent
中)子类是否已覆盖doSomething()
。我该怎么做?
class Parent {
func doSomething() {}
func subclassOverridesDoSomething() -> Bool {
// what goes here?
return true
}
}
class Child: Parent {
override func doSomething() {}
}
我知道我可以用NSObject
甚至Objective C运行时函数来完成这个,但是如何使用Swift类呢?
答案 0 :(得分:1)
如果使用dynamic
公开函数,则可以使用Objective-C运行时:
class Parent {
func doSomething() {}
func subclassOverridesDoSomething(t:Parent.Type) -> Bool {
let originalMethod = class_getInstanceMethod(t, "doSomething")
return originalMethod != nil
}
}
class Child: Parent {
dynamic override func doSomething() {}
}
Parent().subclassOverridesDoSomething(Child.self)
如果省略dynamic
,则无法正常工作,因为Objective-C无法查看该方法。
答案 1 :(得分:0)
Well Swift并没有真正提供这样做的方法。
另外在我看来,使用像method_getImplementation
或NSObject
这样的Objective-c方法没有任何缺点。您将不得不使用objective-c为您解决问题的方法。
例如:
let selector = Selector("viewWillAppear:")
let originalMethod = class_getInstanceMethod(YourClass, selector)