Я пытаюсь построить протоколы ProtocolA, ProtocolB и ProtocolC и классы на их основе, где:
public protocol ProtocolA {
associatedtype B: ProtocolB
associatedtype C: ProtocolC
var arrayB: [B] {get set}
var someNumber: C {get set}
}
public protocol ProtocolB {
associatedtype A: ProtocolA
associatedtype C = A.C
var arrayC: [C] {get set}
var parent: A? {get set}
}
public protocol ProtocolC {
init()
}
Выглядит хорошо, я могу определить классы:
open class ClassA<BC:ProtocolB, CC:ProtocolC>: ProtocolA {
public typealias B = BC
public typealias C = CC
public var someNumber: CC = CC()
public var arrayB: [BC] = []
}
open class ClassB<AC:ProtocolA> : ProtocolB{
open var arrayC: [AC.C] = []
public typealias A = AC
public typealias C = AC.C //
public var parent: AC? = nil
}
open class ClassC: ProtocolC {
required public init() {
}
}
Но сейчас нет способа инициировать ClassA или ClassB:
let c = ClassC() // OK
let b = ClassB<ClassA<ClassB<ClassA.....>>>, ClassC>() // No way
let a = ClassA<ClassB<ClassA<ClassB...>>>, ClassC>() // No way either
Есть ли способ обойти эту и подобные проблемы?