# How to write a single extension for multiple types to override their Objective-C superclass' methods?

**URL:** <https://forums.swift.org/t/how-to-write-a-single-extension-for-multiple-types-to-override-their-objective-c-superclass-methods/30858>\
**Category:** Using Swift\
**Tags:** extensions, extension\
**Created:** [November 16, 2019, 10:38pm UTC](https://forums.swift.org/t/how-to-write-a-single-extension-for-multiple-types-to-override-their-objective-c-superclass-methods/30858 "2019-11-16T22:38:28Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![SubjugaterCephalopod](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/subjugatercephalopod/32/9536_2.png) [@SubjugaterCephalopod](https://forums.swift.org/u/SubjugaterCephalopod)\
**Post date:** [November 16, 2019, 10:38pm UTC](https://forums.swift.org/t/how-to-write-a-single-extension-for-multiple-types-to-override-their-objective-c-superclass-methods/30858/1 "2019-11-16T22:38:28Z")

</div>

I have

```swift
import SpriteKit 

class SceneTypeA: SKScene {} // SKScene: SKNode
class SceneTypeB: SKNode {} // Different inheritance paths.

extension SceneTypeA {
    override func mouseEntered(with event: NSEvent) {} // Works.
}

extension SceneTypeB {
    override func mouseEntered(with event: NSEvent) {} // Works.
}

```

But how to avoid code duplication? especially when I have multiple mouse/touch/keyboard methods for both types.

Things I've tried:

```swift
protocol MouseHandler {
    func mouseEntered(with event: NSEvent)
}
extension SKNode: MouseHandler {}

extension MouseHandler where Self == SKNode { // or Self: SKNode
    override func mouseEntered(with event: NSEvent) {
        // ❌ Method does not override any method from its superclass
    }
}

```

```swift
extension SKNode where Self: SKScene { // ❌ Trailing 'where' clause for extension of non-generic type 'SKNode'
    open override func mouseEntered(with event: NSEvent) {
        // ❌ Members of constrained extensions cannot be declared @objc
    }
}

```

If I create a subclass of `SKNode`, it won't apply to subclasses of `SKScene: SKNode`.
