Published on

Maxsus komponentlar va qayta ishlatiladigan viewlar

Authors

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
StatCard.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() } }
QatorVazifasi
struct StatCard: ViewYangi SwiftUI ko'rinish e'lon qiladi β€” Stage 1 dan beri bir xil pattern, farqi qayta ishlatish uchun mo'ljallangan.
let title: StringMajburiy xususiyat β€” StatCard yaratuvchi sarlavha uzatishi shart. Swift buni kompilyatsiyada tekshiradi.
var accentColor: Color = .blueStandart 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

PatternIshlatish holati
struct MeningKarti: ViewBir xil UI pattern β‰₯3 joyda β€” parametrlashtiring
@ViewBuilder contentChaqiruvchi istalgan ko'rinishni uzatishi kerak
ViewModifier protokoliModifikatorlar to'plamini birlashtirish
extension View { func ... }Modifier ni o'rnatilgan kabi chaqirish
Xcode β†’ Extract SubviewKo'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.

Buy mea coffee