Вопрос проверяет умение расширять стандартный набор SwiftUI и создавать свои переиспользуемые визуальные элементы.
В SwiftUI кастомный компонент — это просто структура, соответствующая протоколу View, в которой вы описываете комбинирование встроенных вью и модификаторов. Можно сделать свой struct MyButton: View, добавить любые параметры («состояние», замыкания) и внутри тела разместить Text, Image и т. д. Такой компонент легко переиспользовать и настраивать.
Определение компонента:
Создайте struct и унаследуйтесь от View.
Объявите параметры (@Binding, Action или простые свойства).
Описание тела (body):
Составьте иерархию вью: VStack, HStack, ZStack, или одиночный элемент.
Применяйте стандартные модификаторы: .padding(), .background(), .cornerRadius().
Пример:
struct RoundedButton: View {
let title: String
let action: () -> Void
var body: some View {
Button(action: action) {
Text(title)
.padding()
.frame(maxWidth: .infinity)
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
}
}Переиспользование и настраиваемость:
Можно добавить @Binding var isEnabled: Bool или @State внутри компонента.
Внедрять тему через Environment или параметры конструктора.
Вывод:
Кастомные компоненты в SwiftUI — это просто View-структуры, которые создают удобный и унифицированный интерфейс для повторного использования по всему приложению.