Using class-constrained protocol as AnyObject

I could be wrong, but I think you don't need an associated type for this scenario.

protocol MyClassObserver: AnyObject {
    func myClassDidSomething(_ instance: MyClass)
}

protocol Observable {
    var observers: [ObjectIdentifier: AnyObject] { get set }
}

extension Observable {
    mutating func addObserver(_ observer: AnyObject) {
        let id = ObjectIdentifier(observer)
        observers[id] = observer // (we'd toss some weak-boxing in here too)
    }
}

class MyClass : Observable {
    var observers: [ObjectIdentifier : AnyObject] = [ObjectIdentifier : MyClassObserver]()
}