Por que o protocolo de adoção da classe A não atende aos requisitos do protocolo B
Criei o código do playground abaixo para ilustrar uma dificuldade que estou tendo no meu projeto atual. Alguém pode me ajudar a entender o erro do compilador na última linha?
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>'
[Estou adicionando palavras à parte inferior desta pergunta para que haja palavras suficientes para tornar o "verificador de correção" excedente da pilha. Realmente acho que não posso dizer mais nada para acrescentar clareza à minha pergunta. O erro do compilador diz tudo]