Протокол не соответствует самому себе?

дал код игровой площадки ниже, чтобы проиллюстрировать сложность моего текущего проекта. Может кто-нибудь помочь мне понять ошибку компилятора в последней строке?

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>'

[Я добавляю слова в конец этого вопроса, чтобы было достаточно слов, чтобы сделать переполнение стека «проверкой корректности» счастливым. Я действительно думаю, что больше ничего не могу сказать, чтобы внести ясность в мой вопрос. Ошибка компилятора говорит само за себя]

Ответы на вопрос(0)

Ваш ответ на вопрос