Выбор ответа Senior SwiftUI обновлено

Чем вредит AnyView

Вопрос

Почему AnyView в больших списках и часто обновляемых экранах считается антипаттерном?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Он стирает статический тип иерархии, и SwiftUI хуже сравнивает дерево. Обычное body имеет точный тип вроде VStack<TupleView<(Text, Image), и SwiftUI знает структуру заранее.

Варианты ответа

  1. AnyView нельзя использовать внутри List и ForEach, они требуют конкретный тип
  2. Он стирает статический тип иерархии, и SwiftUI хуже сравнивает деревоправильный ответ
  3. AnyView создаёт отдельный UIViewController на каждый экземпляр
  4. AnyView полностью отключает анимации для всего вложенного поддерева

Разбор

Обычное body имеет точный тип вроде VStack<TupleView<(Text, Image)>>, и SwiftUI знает структуру заранее. AnyView прячет тип, и при смене содержимого фреймворку приходится сравнивать динамически, а при разных типах внутри он заменяет поддерево целиком. Вместо него используют @ViewBuilder, some View, Group и условия внутри модификаторов. В List его использовать можно, контроллеры он не создаёт, анимации не отключает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.