- Published on
Maxsus komponentlar va qayta ishlatiladigan viewlar
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Bir xil SwiftUI kodni uch yoki undan ko'p joyga nusxalaganingizni sezsangiz β uni qayta ishlatiladigan komponentga chiqarish vaqti keldi. Bu uch qoidasi: uch joyda bir pattern β standartlashtirishga arziydi.
LEGO g'ishtini tasavvur qiling. G'isht final modelda qayerda bo'lishini bilmaydi β faqat o'z shakli va rangini biladi. Buni qo'yganda tafsilotlarni belgilaysiz. Parameterized SwiftUI komponenti xuddi shunday ishlaydi.
Swiftβ’
import SwiftUI
// Qayta ishlatiladigan stat karti β istalgan joyda ishlatiladigan
struct StatCard: View {
// Xususiyatlar komponentni call site da sozlash imkonini beradi
let title: String
let value: String
let icon: String
var accentColor: Color = .blue // Standart qiymat β ixtiyoriy
var body: some View {
VStack(alignment: .leading, spacing: 8) {
// Injeksiya qilingan symbol nomi va rang bilan ikonka qatori
Label(title, systemImage: icon)
.font(.caption)
.foregroundStyle(accentColor)
// Asosiy qiymat, yaqqol ko'rsatilgan
Text(value)
.font(.title2.bold())
.foregroundStyle(.primary)
}
.padding()
.background(.regularMaterial)
.clipShape(RoundedRectangle(cornerRadius: 12))
}
}
// Komponentdan foydalanish β har xil ma'lumot, bir xil vizual tuzilma
struct DashboardView: View {
var body: some View {
HStack {
StatCard(title: "Qadam", value: "8,421",
icon: "figure.walk", accentColor: .green)
StatCard(title: "Kaloriya", value: "542",
icon: "flame.fill", accentColor: .orange)
StatCard(title: "Uyqu", value: "7s 20d",
icon: "moon.fill", accentColor: .indigo)
}
.padding()
}
}
| Qator | Vazifasi |
|---|---|
struct StatCard: View | Yangi SwiftUI ko'rinish e'lon qiladi β Stage 1 dan beri bir xil pattern, farqi qayta ishlatish uchun mo'ljallangan. |
let title: String | Majburiy xususiyat β StatCard yaratuvchi sarlavha uzatishi shart. Swift buni kompilyatsiyada tekshiradi. |
var accentColor: Color = .blue | Standart qiymatli ixtiyoriy xususiyat. Rang uzatilmasa ko'k ishlatiladi β call site ni toza saqlaydi. |
.background(.regularMaterial) | Muzli shisha effekti β yorug' va qorong'u rejimga avtomatik moslashadi. Qo'shimcha ish kerak emas. |
Komponent patternlari
// @ViewBuilder β chaqiruvchiga istalgan ko'rinishni uzatish imkoni
struct CardContainer<Content: View>: View {
let content: Content
init(@ViewBuilder content: () -> Content) {
self.content = content()
}
var body: some View {
content
.padding()
.background(.regularMaterial)
.clipShape(RoundedRectangle(cornerRadius: 12))
}
}
// Foydalanish β istalgan ko'rinish qavs ichiga
CardContainer {
Text("Bu yerga istalgan narsa")
}
CardContainer {
VStack {
Image(systemName: "star.fill")
Text("Sevimli")
}
}
// Custom ViewModifier β modifikatorlar to'plamini birlashtirish
struct PrimaryButtonStyle: ViewModifier {
func body(content: Content) -> some View {
content
.font(.headline)
.foregroundStyle(.white)
.padding(.horizontal, 24)
.padding(.vertical, 12)
.background(.blue)
.clipShape(Capsule())
}
}
// Extension β o'rnatilgan modifier sintaksida chaqirish
extension View {
func primaryButton() -> some View {
modifier(PrimaryButtonStyle())
}
}
// Foydalanish β har qanday ko'rinishga
Button("Saqlash") { }
.primaryButton()
Text("Belgilash")
.primaryButton()
Tezkor ma'lumotnoma
| Pattern | Ishlatish holati |
|---|---|
struct MeningKarti: View | Bir xil UI pattern β₯3 joyda β parametrlashtiring |
@ViewBuilder content | Chaqiruvchi istalgan ko'rinishni uzatishi kerak |
ViewModifier protokoli | Modifikatorlar to'plamini birlashtirish |
extension View { func ... } | Modifier ni o'rnatilgan kabi chaqirish |
| Xcode β Extract Subview | Ko'rinishni avtomatik struct ga ajratadi |
π― Topshiriq: qayta ishlatiladigan karta komponenti
Uch xususiyatli β title: String, subtitle: String, icon: String β InfoCard komponenti yarating. Kamida uch joyda har xil ma'lumot bilan ishlating. Keyin PrimaryButtonStyle ViewModifier yarating va uni uch xil tugmaga qo'llang. Dizaynni bir joyda o'zgartiring β hamma joyda yangilanishini tasdiqlang.