¿Por qué la clase A que adopta el protocolo B no cumple el requisito del protocolo B?

He creado el siguiente código del patio de juegos para ilustrar una dificultad que tengo con mi proyecto actual. ¿Alguien puede ayudarme a comprender el error del compilador en la última línea?

import Foundation

//******************************************************************************
//                            This Compiles
//******************************************************************************

protocol Protocol1 : AnyObject {
    var related: [Protocol2] { get set }
}

protocol Protocol2 : AnyObject {
    var related: [Protocol1] { get set }
}

class Class1 : Protocol1 {
    var related = [Protocol2]()
}

class Class2 : Protocol2 {
    var related = [Protocol1]()
}

let class1 = Class1()
let class2 = Class2()
class2.related.append(class1)


//******************************************************************************
//                            This Does Not Compile
//******************************************************************************

class Weak<T: AnyObject> {
    weak var reference : T?
    init (_ reference: T) {
        self.reference = reference
    }
}

protocol ProtocolA : AnyObject {
    var related: [Weak<ProtocolB>] { get set }
}

protocol ProtocolB : AnyObject {
    var related: [Weak<ProtocolA>] { get set }
}

class ClassA : ProtocolA {
    var related = [Weak<ProtocolB>]()
}

class ClassB : ProtocolB {
    var related = [Weak<ProtocolA>]()
}

let classA = ClassA()
let classB = ClassB()
classA.related.append(Weak(classB)) // <= Cannot convert value of type 'Weak<ClassB>' to expected argument type 'Weak<ProtocolB>'

[Estoy agregando palabras al final de esta pregunta para que haya suficientes palabras para hacer feliz al desbordamiento de pila "corrector de corrección". Realmente creo que no hay nada más que pueda decir para agregar claridad a mi pregunta. El error del compilador lo dice todo]

Respuestas a la pregunta(0)

Su respuesta a la pregunta