Vetter
@Vetter

Как в массиве, состоящем из элементов дочерних классов, обратиться к свойствам дочерних классов без приведения типа?

Есть базовый класс BaseBuilding и несколько дочерних: Gallery, Tower, Shop
создаем массив
var arr = [BaseBuilding]()
и наполняем его элементами дочерних типов.
если сделаем print(arr), то получаем:
[SomeName.Gallery, SomeName.Shop, SomeName.Tower, SomeName.Shop]

type(of: arr[2])выдаёт правильный тип элемента - Tower

Но чтобы обратиться к свойствам этого элемента - нужно сначала сделать приведение типов.
let towerHeight = (arr[2] as! Tower).height

Как сделать так, чтобы можно было напрямую достучаться до свойств дочерних классов?
чтобы работала конструкция типа
let towerHeight = arr[2].height

Подозреваю, что нужен extension для array, но как именно выцепить тип элемента массива?
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 1
doublench21
@doublench21 Куратор тега Swift
Нельзя! Это и есть суть строго типизированных языков.
type(of: ) это вывод типа динамически, но компилятору глубоко и с колокольни до этого. Он видит только тип, который Вы указали изначально. Это и правильно! Нет никаких если, если вам нужна некая функциональность у потомков в рамках родителя, то создавайте протокол и описывайте их. Это основы ООП
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы