Skip to content

Inheritance

NSObject

Inheritance towards Class and not extension of that class. Inherit to NSObject in the base class implementation.

When you have conform to a specific protocol for its delegate callbacks and the protocol internally also needs to be conformed with NSObject where AnyClass: NSObject maybe.

Then you would have to inherit to your class YourClassNameHere: NSObject and not on extension YourClassNameHere: NSObject Also you would need to call in super.init() in its initializer.

Example of WKWebview Delegate

import WebKit
final class YourClassNameHere: NSObject {

    init() {
    super.init()
    // reference self afterwards
    }

}

extension YourClassNameHere: WKScriptMessageHandler {

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { 
        print("Delegate method called")
    } 

}

Inheritance from non-protocol type 'NSObject' - Don't inherit to a protocol.

If you have lot of protocol conformance autocomplete stubs in class declaration then don't try to subclass NSObject in that class' extension. extension YourClassNameHere: NSObject

Reference

https://stackoverflow.com/questions/24650325/why-in-swift-we-cannot-adopt-a-protocol-without-inheritance-a-class-from-nsobjec

https://stackoverflow.com/questions/40705591/class-does-not-conform-nsobjectprotocol?noredirect=1&lq=1

https://www.hackingwithswift.com/read/10/5/custom-subclasses-of-nsobject