Why we can override the function in the XCTestCase extension without @obj
However, for the base class does not inherit XCTestCase, you need to add @objc.
Why we can override the function in the XCTestCase extension without @obj
However, for the base class does not inherit XCTestCase, you need to add @objc.
XCTestCase
inherits from XCTest
(which inherits from NSObject
), it doesn’t inherit directly from NSObject
.
So in your example, it would be something like:
class A: NSObject {}
extension A {
func hello() {}
}
class B: A {}
class C: B {
override func hello() {} // ok
}
XCTestCase has a special attribute that makes all members @objc
by default, because the test discovery mechanism on Apple platforms uses the ObjC runtime. So yes, XCTestCase is special. (You can still opt out with @nonobjc
, and methods that aren't ObjC-compatible won't be exposed to Objective-C either.)