Выбор ответа Senior SwiftUI обновлено
Чем вредит AnyView
Вопрос
Почему AnyView в больших списках и часто обновляемых экранах считается антипаттерном?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Он стирает статический тип иерархии, и SwiftUI хуже сравнивает дерево. Обычное body имеет точный тип вроде VStack<TupleView<(Text, Image), и SwiftUI знает структуру заранее.
Варианты ответа
AnyViewнельзя использовать внутриListиForEach, они требуют конкретный тип- Он стирает статический тип иерархии, и SwiftUI хуже сравнивает деревоправильный ответ
AnyViewсоздаёт отдельныйUIViewControllerна каждый экземплярAnyViewполностью отключает анимации для всего вложенного поддерева
Разбор
Обычное body имеет точный тип вроде VStack<TupleView<(Text, Image)>>, и SwiftUI знает структуру заранее. AnyView прячет тип, и при смене содержимого фреймворку приходится сравнивать динамически, а при разных типах внутри он заменяет поддерево целиком. Вместо него используют @ViewBuilder, some View, Group и условия внутри модификаторов. В List его использовать можно, контроллеры он не создаёт, анимации не отключает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.