tgoop.com/mobileproglib/6357
Create:
Last Update:
Last Update:
В проектах на SwiftUI тело View может быстро разрастись: десятки вложенных VStack/HStack, логика отображения, стили — всё в одном месте.
Вот три практики, которые помогут сделать код более понятным, гибким и удобным в сопровождении.
Если часть интерфейса имеет собственное назначение — вынеси её в отдельный struct-View:
struct ArticleRow: View {
let article: Article
var body: some View {
HStack { … }
}
}Затем:
ForEach(articles, id: \.url) { article in
ArticleRow(article: article)
}Это делает главный
View более “обзорным” и облегчает повторное использование. Когда видишь дублирования стилей, вынеси их:
struct CardStyle: ViewModifier {
func body(content: Content) -> some View {
content
.padding()
.background(Color(.secondarySystemBackground))
.cornerRadius(8)
}
}
extension View {
func cardStyle() -> some View {
modifier(CardStyle())
}
}Теперь:
ArticleRow(article: article)
.cardStyle()
Так ты централизуешь “язык дизайна” и можешь менять стиль в одном месте.
Если повторяются шаблоны (например, “заголовок секции”), можно сделать расширение:
extension View {
func sectionHeader(_ title: String) -> some View {
VStack(alignment: .leading, spacing: 4) {
Text(title)
.font(.title3)
.bold()
self
}
}
}Пример:
VStack {
ForEach(articles, id: \.url) { article in
ArticleRow(article: article)
}
}
.sectionHeader("Articles")Такие расширения уменьшают вложенность и делают код декларативнее.
Если вы не уверены, стоит ли что-то извлекать, спросите:
Есть ли у этого элемента пользовательского интерфейса чёткое назначение и возможность повторного использования?
View или ViewModifier.Цель состоит не в том, чтобы сократить количество строк кода, а в том, чтобы повысить ясность и возможность повторного использования для улучшения архитектуры SwiftUI.
#АрхитектурныйКод #SeniorView #Swift
