Почему extension A: A.Nested.Doable (последняя строка) вызывает циклическую ссылку в следующем коде Swift 5.10?
class Parent1 {
}
class Parent2 {
}
class A: Parent1 {
}
extension A { class Nested: Parent2 {
} }
extension A.Nested { protocol Doable {
} }
extension A: A.Nested.Doable {
}
Если не наследовать A.Nested ни от чего, то в коде Xcode не будет найдена циклическая ссылка.
Xcode 15.3, MacBook Air M1 8 ГБ, macOS Sonoma 14.4.1.
@JoakimDanielson В моем конкретном случае у меня есть подкласс контроллера представления, который определяет подкласс ячейки табличного представления, и я хотел использовать шаблон делегата, чтобы заставить контроллер представления взаимодействовать с ячейкой, в частности, я хотел внедрить контроллер представления в ячейку как определенный протокол (разделение интерфейсов), которому должен соответствовать контроллер представления, и определения вложенности помогают мне уменьшить бремя переименования (переименования).
На мой взгляд, если вы определяете протокол, вы должны делать это в той же области действия или за ее пределами, что и тип(ы), которые должны ему соответствовать.





Если это поможет, он компилируется, когда вы объединяете класс A без добавления соответствия протоколу через расширение:
class A: Parent1, A.Nested.Doable {
class Nested: Parent2 {
protocol Doable {
}
}
}
Зачем создавать такой код, какова цель подобных вложенных классов и определений протоколов? Вы говорите, что A соответствует Doable, но протокол является внутренним типом внутри A, я не могу понять, как это должно работать.