ViewModifier: bu nədir, View modifikatorları SwiftUI-də

Müəllif: IT Sectr Dərc olunub: 2026-06-24 Oxuma vaxtı: 6 dəq

ViewModifier — SwiftUI-də View-in görünüşünü və davranışını dəyişdirmək üçün təkrar istifadə oluna bilən modifikatorlar yaratmağa imkan verən protokoldur. Apple Developer Documentation, 2024-ə görə, ViewModifier orijinal View-i qəbul edən və dəyişdirilmiş View-i qaytaran body(content:) metodunun tətbiqini tələb edir və daxili modifikatorların istənilən kombinasiyasını vahid tipdə kapsullaşdırır. Bu protokol olmadan tərtibatçılar eyni modifikator zəncirlərini hər istifadə yerində təkrarlamalı olardılar.

Əsas məqamlar

  • ViewModifier — SwiftUI-də xüsusi View modifikatorları yaratmaq üçün protokol
  • body(content:) — dəyişdirilmiş View-i qaytaran yeganə məcburi metod
  • Daxili modifikatorlar (font, padding) — View-in genişləndirmə metodları, ViewModifier-i tətbiq etmir
  • Xüsusi modifikatorlar təkrarlanan stil kombinasiyalarını kapsullaşdırmağa imkan verir
  • ModifiedContent — ViewModifier-in View-ə tətbiqi zamanı qaytarılan tip

SwiftUI-də ViewModifier nədir?

ViewModifier — istənilən View tipinə tətbiq oluna bilən modifikatorlar yaratmaq üçün müqavilə müəyyən edən SwiftUI protokoludur. O, protocol ViewModifier { associatedtype Body: View; func body(content: Content) -> Body } kimi elan edilmişdir, burada Content modifikatora ötürülən orijinal View-in tipidir.

ViewModifier protokolu iOS 13-də SwiftUI-nin ilk versiyası ilə birlikdə meydana çıxdı və iOS 18+ daxil olmaqla stabil olaraq qalır. Əsas məqsəd tərtibatçılara təkrarlanan modifikator zəncirlərini vahid təkrar istifadə oluna bilən tipdə kapsullaşdırmaq mexanizmi təqdim etməkdir. ViewModifier olmadan hər dəfə eyni stil dəstini tətbiq etmək lazım gəldikdə bütün modifikatorları əl ilə təkrarlamaq məcburiyyəti yaranardı.

Swift by Sundell (2023)-ə görə, ViewModifier eyni modifikator dəsti üç və daha çox yerdə istifadə edildikdə SwiftUI layihələrində stilləri təşkil etməyin üstünlük verilən üsuludur. Tək istifadəlik kombinasiyalar üçün birbaşa View-də daxili modifikatorlar zənciri kifayətdir.

Protokolun sintaksisi

ViewModifier protokolu bir body(content:) metodunun tətbiqini tələb edir və isteğe bağlı olaraq xüsusi modifikatorun init parametrləri vasitəsilə davranışı konfiqurasiya etmək üçün xüsusiyyətlər təmin edə bilər.

ViewModifier protokolu necə işləyir

ViewModifier protokolu orijinal View-i (Content tipi) qəbul edən və dəyişdirilmiş View-i (Body tipi) qaytaran body(content:) metodunu müəyyən edir. SwiftUI modifikatoru View-ə tətbiq edir, onu content-ə ötürür və nəticədən göstərmək üçün istifadə edir.

swift
struct CardStyle: ViewModifier {
    func body(content: Content) -> some View {
        content
            .padding(16)
            .background(Color.white)
            .cornerRadius(12)
            .shadow(radius: 4, x: 0, y: 2)
    }
}

// İstifadə:
Text("Salam, SwiftUI!")
    .modifier(CardStyle())

.modifier(CardStyle()) çağırdıqda, SwiftUI orijinal View və modifikatoru saxlayan ModifiedContent<Text, CardStyle> nümunəsi yaradır. Render zamanı SwiftUI CardStyle.body(content: text)-i çağırır, padding, background, cornerRadius və shadow ilə dəyişdirilmiş View əldə edir.

Əhəmiyyətli fərq: ViewModifier.body hər View yenilənməsində çağırılır, ona görə də body daxilində ağır hesablamalar və ya yan təsirlər olmamalıdır. Modifikator xarici məlumatlardan (vəziyyət, mühit) asılıdırsa, onları init parametrləri vasitəsilə ötürün.

Daxili və xüsusi modifikatorlar: fərqlər

SwiftUI-nin daxili modifikatorları (font, foregroundColor, frame, padding) — ModifiedContent tipini qaytaran View protokolunun genişləndirmə metodlarıdır. Onlar birbaşa ViewModifier-i tətbiq etmir — SwiftUI hər daxili modifikator üçün daxili optimallaşdırılmış tətbiqlərdən istifadə edir.

XüsusiyyətDaxili modifikatorlarXüsusi ViewModifier
TətbiqView genişləndirmə metodlarıViewModifier protokolu
Təkrar istifadəTək istifadəlik zəncirÇoxsaylı istifadə
ParametrlərSabit (rəng, ölçü)Init vasitəsilə istənilən
PerformansMaksimum (daxili optimallaşdırmalar)Bir qədər yüksək yük
Qaytarma tipiModifiedContentModifiedContent

Xüsusi ViewModifier eyni modifikator kombinasiyası iki və ya daha çox yerdə istifadə edildikdə əsaslandırılır. Tək istifadə üçün birbaşa modifikator zənciri üstünlük təşkil edir — kod oxunaqlı qalır və kompilyator daha yaxşı optimallaşdırır.

WWDC 2023-ə görə, Apple tətbiqin dizayn sistemi ilə əlaqəli stillər (kartlar, düymələr, giriş sahələri) üçün xüsusi ViewModifier yaratmağı tövsiyə edir. Bu, vahidliyi təmin edir və dizayn dəyişikliklərində texniki xidməti asanlaşdırır.

ViewModifier istifadə nümunələri

Nümunə 1: dizayn sisteminin kapsullaşdırılması. ViewModifier-in ən çox yayılmış istifadə ssenarisi — tətbiqdə vizual stillər üçün vahid həqiqət mənbəyi yaratmaqdır. Dizayn sisteminin hər bir elementi (kart, düymə, başlıq) öz modifikatorunu alır.

swift
struct PrimaryButton: ViewModifier {
    var isEnabled: Bool

    func body(content: Content) -> some View {
        content
            .font(.headline.weight(.semibold))
            .foregroundColor(.white)
            .padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24))
            .background(isEnabled ? Color.blue : Color.gray)
            .cornerRadius(8)
            .opacity(isEnabled ? 1.0 : 0.6)
    }
}

Nümunə 2: modifikatorun şərti tətbiqi. Bəzən modifikatoru yalnız müəyyən şərtdə tətbiq etmək lazım gəlir. Boolean parametrli ViewModifier bu məntiqi body daxilində kapsullaşdırmağa imkan verir.

Nümunə 3: modifikatorların kompozisiyası. ViewModifier öz body-si daxilində digər ViewModifier-ləri tətbiq edə bilər. Bu, hər biri vizual təqdimatın öz aspektinə cavabdeh olan modifikatorlar iyerarxiyası qurmağa imkan verir. Məsələn, CardStyle daxildə ShadowStyle və BorderStyle tətbiq edə bilər.

Point-Free (2024)-ə görə, ViewModifier vasitəsilə modifikatorların kompozisiyası mirasdan üstündür: hər modifikator bir tapşırığa cavabdehdir və onlar müstəqil birləşdirilə bilər. Bu, SwiftUI-də tək məsuliyyət prinsipinə uyğundur.

Performans və modifikator kompozisiyası

ViewModifier-in performansı hər tətbiqdə yaradılan ModifiedContent qablaşdırmalarının sayından asılıdır. SwiftUI render mərhələsində diffing vasitəsilə modifikator zəncirlərini optimallaşdırır, lakin həddindən artıq modifikator sayı yenilənməni yavaşlada bilər.

Modifikator sayıPerformansa təsirTövsiyə
1–5Minimalİstənilən View üçün normal
5–10OrtaViewModifier-də qruplaşdırmaq
10–20Nəzərə çarpanBir xüsusi modifikatorda birləşdirmək
20+KritikView arxitekturasını yenidən nəzərdən keçirmək

Optimallaşdırma: eyni tipli bir neçə ardıcıl modifikatoru (məsələn, bir neçə padding) birinə birləşdirin. PreferenceKey-dən yalnız həqiqətən zəruri olduqda istifadə edin — üstünlükləri oxuyan modifikatorlar əlavə render keçidinə səbəb olur.

Praktik qayda: View-də 10-dan çox modifikator varsa — onların bir hissəsini xüsusi ViewModifier-ə çıxarın. Bu, oxunaqlılığı yaxşılaşdıracaq və SwiftUI-ə yenilənmələri optimallaşdırmağa imkan verəcək. SwiftUI Lab (2024)-ə görə, modifikatorların ViewModifier-də qruplaşdırılması mürəkkəb View-lər üçün render müddətini 15–30% azaldır.

Tez-tez verilən suallar

SwiftUI-də ViewModifier nədir?

ViewModifier — View-in görünüşünü və ya davranışını dəyişdirən təkrar istifadə oluna bilən modifikatorlar yaratmaq üçün protokoldur. O, orijinal View-i qəbul edən və dəyişdirilmiş View-i qaytaran body(content:) metodunun tətbiqini tələb edir.

ViewModifier daxili modifikatorlardan nə ilə fərqlənir?

Daxili modifikatorlar (font, padding) — daxili optimallaşdırılmış tətbiqlərdən istifadə edən View protokolunun genişləndirmə metodlarıdır. ViewModifier daxili modifikatorların kombinasiyasını kapsullaşdıran və init parametrlərinə malik ola bilən xüsusi modifikatorlar üçün protokoldur.

Nə vaxt xüsusi ViewModifier yaratmalıyam?

Eyni modifikator kombinasiyası üç və daha çox yerdə istifadə edildikdə xüsusi ViewModifier yaradın. Tək istifadəlik zəncirlər üçün birbaşa View modifikatorlarından istifadə edin — bu daha sadə və səmərəlidir.

ViewModifier state (State) ehtiva edə bilərmi?

Bəli, ViewModifier @State və ya @Environment xüsusiyyətləri ehtiva edə bilər. SwiftUI onların həyat dövrünü View-də olduğu kimi idarə edir. Bununla belə, body hər yenilənmədə çağırılır, ona görə də modifikatorun gövdəsində ağır əməliyyatlardan çəkinin.

ViewModifier-i şərti olaraq necə tətbiq etmək olar?

@ViewBuilder daxilində if/else istifadə edin və ya body daxilində dəyişiklikləri tətbiq edən və ya atlayan boolean parametrli modifikator yaradın. Məsələn, yuxarıdakı PrimaryButton stili şərti tətbiq etmək üçün isEnabled istifadə edir.

Xülasə

  • ViewModifier — təkrar istifadə oluna bilən View modifikatorları yaratmaq üçün SwiftUI protokolu
  • body(content:) — orijinal View-i qəbul edən və dəyişdirilmiş View-i qaytaran metod
  • Daxili modifikatorlar — ViewModifier-i tətbiq etməyən View genişləndirmə metodları
  • ModifiedContent — orijinal View-i və tətbiq edilmiş modifikatoru saxlayan tip
  • Xüsusi modifikatorlar kombinasiya 3+ yerdə təkrarlandıqda əsaslandırılır
  • Kompozisiya ViewModifier vasitəsilə mirasdan üstündür
  • Qruplaşdırma modifikatorların ViewModifier-də performansı 15–30% artırır

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun