.modifier(): bu nədir, SwiftUI-də modifikatorların tətbiqi metodu

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

.modifier() — SwiftUI-də View protokolunun metodudur, istənilən View növünə xüsusi ViewModifier nümunəsini tətbiq edir. Apple Developer Documentation, 2024-a görə, metod ViewModifier qəbul edir və ModifiedContent qaytarır, orijinal View-i dəyişdirilmiş versiyaya bükərək. Sabit parametrləri olan genişləndirmə metodları olan daxili modifikatorlardan fərqli olaraq, .modifier() ViewModifier protokolunu həyata keçirən tipdə kapsullaşdırılmış istənilən xüsusi məntiqdən istifadə etməyə imkan verir.

Əsas qeydlər

  • .modifier() — View-ə xüsusi ViewModifier tətbiq etmək üçün metod
  • ModifiedContent — orijinal View və modifikatoru saxlayan qaytarılma tipi
  • Xüsusi modifikatorlar ViewModifier protokolu vasitəsilə yaradılır
  • Zəncir .modifier() çağırışları ModifiedContent bükülmələri iyerarxiyası yaradır
  • Şərti tətbiq if/else və ya modifikator parametrləri ilə həyata keçirilir

SwiftUI-də .modifier() nədir?

.modifier() — View protokolunda elan edilmiş metoddur: func modifier<M: ViewModifier>(_ modifier: M) -> ModifiedContent<Self, M>. O, ViewModifier-i həyata keçirən tip nümunəsini qəbul edir və ModifiedContent tipinə bükülmüş dəyişdirilmiş View qaytarır.

Metod iOS 13-də ortaya çıxdı və SwiftUI-də xüsusi modifikatorların tətbiqinin əsas üsuludur. Birbaşa View-də çağırılan daxili modifikatorlardan (font, foregroundColor, frame) fərqli olaraq, .modifier() əvvəlcədən modifikator tipinin yaradılmasını tələb edir. Bu bir abstraksiya səviyyəsi əlavə edir, lakin təkrar istifadə və parametrləşdirmə imkanları açır.

Hacking with Swift (2024) məlumatlarına görə, .modifier() təkrarlanan UI elementləri üçün vahid stil tələb olunan hər SwiftUI layihəsində istifadə olunur. Metod daxili modifikatorlar zənciri ilə müqayisədə əlavə yük yaratmır — kompilyator çağırışı optimallaşdırır.

İmza və tiplər

modifier metodu ViewModifier protokolu ilə məhdudlaşdırılmış M generik parametrini qəbul edir. Generiklər sayəsində kompilyator modifikatorun konkret tipini bilir və tip silinməsi (type erasure) olmadan nəticə View tipini optimallaşdıra bilir.

modifier(_:) metodu necə işləyir

modifier(_:) metodu orijinal View-i (Self) ötürülən modifikatorla (M) birləşdirən ModifiedContent nümunəsi yaradır. Render edərkən SwiftUI M.body(content: self) çağırır, orijinal View-i content parametri kimi ötürür.

swift
struct RoundedBorder: ViewModifier {
    let color: Color
    let width: CGFloat

    func body(content: Content) -> some View {
        content
            .padding(8)
            .overlay(
                RoundedRectangle(cornerRadius: 8)
                    .stroke(color, lineWidth: width)
            )
    }
}

// .modifier() vasitəsilə tətbiq:
Text("Salam")
    .modifier(RoundedBorder(color: .blue, width: 2))

// Ekvivalent birbaşa zəncir:
Text("Salam")
    .padding(8)
    .overlay(
        RoundedRectangle(cornerRadius: 8)
            .stroke(Color.blue, lineWidth: 2)
    )

Tətbiq ardıcıllığı: modifikatorlar xaricdən daxilə tətbiq olunur. İlk .modifier() çağırışı View-i xaricdən bükür, ikincisi — birincinin üstündə və s. Bu, kompozisiyada vacibdir — ardıcıllıq vizual nəticəyə təsir edir.

Apple WWDC 2022 məlumatlarına görə, SwiftUI ModifiedContent iyerarxiyasında dəyişiklikləri müəyyən etmək üçün Identity əsaslı diffinqdən istifadə edir. Modifikator tipi (M) View identity-nin formalaşmasında iştirak edir, buna görə də müxtəlif modifikator tipləri həmişə yeni identity yaradır, hətta vizual nəticə eyni olsa belə.

.modifier() və daxili modifikatorlar: müqayisə

SwiftUI-nin daxili modifikatorları — View protokolunda elan edilmiş genişləndirmə metodlarıdır. Hər bir daxili modifikator (font, foregroundColor, padding) Apple tərəfindən optimallaşdırılmış öz daxili tətbiqinə malikdir. Onlar ViewModifier protokolundan istifadə etmir və .modifier() vasitəsilə çağırılmır.

Xüsusiyyət.modifier()Daxili modifikatorlar
ProtokolViewModifierView genişləndirmə metodları
Təkrar istifadəİstənilən saydaKodun təkrarlanması tələb olunur
Parametrləşdirməİnisializator vasitəsiləSabit parametrlər
QruplaşdırmaBir neçə modifikator bir yerdəHər biri ayrılıqda
PerformansMüqayisə edilə bilənMaksimum

.modifier() nə vaxt istifadə olunmalı: eyni modifikator kombinasiyası tətbiqin bir neçə yerində tətbiq edildikdə. Bu, stil üçün vahid mənbə təmin edir və refaktorinqi asanlaşdırır. Birbaşa modifikatorlar nə vaxt istifadə olunmalı: konkret View üçün xüsusi olan birdəfəlik tətbiqlər üçün.

Objc.io (2023) məlumatlarına görə, .modifier() və daxili modifikatorlar zənciri arasında performans fərqi statistik əhəmiyyətsizdir (render vaxtının 1%-dən az). Seçim performansla deyil, oxunaqlılıq və təkrar istifadə ilə müəyyən edilməlidir.

.modifier() şərti tətbiqi

Modifikatorun şərti tətbiqi — SwiftUI-də tez-tez rast gəlinən tapşırıqlardan biridir. Üçlü operator vasitəsilə standart yanaşma .modifier() ilə işləmir, çünki müxtəlif modifikator tipləri müxtəlif ModifiedContent tiplərinə gətirib çıxarır.

swift
// ❌ Kompilyasiya olunmur — fərqli modifikator tipləri:
var body: some View {
    Text("Şərti")
        .modifier(isActive ? HighlightStyle() : DefaultStyle())
}

// ✅ Düzgün: @ViewBuilder daxilində if/else:
@ViewBuilder
var body: some View {
    if isActive {
        Text("Şərti").modifier(HighlightStyle())
    } else {
        Text("Şərti").modifier(DefaultStyle())
    }
}

// ✅ Və ya parametrli modifikator:
struct ConditionalStyle: ViewModifier {
    let isActive: Bool

    func body(content: Content) -> some View {
        content
            .foregroundColor(isActive ? .blue : .gray)
            .opacity(isActive ? 1.0 : 0.5)
    }
}

Text("Şərti").modifier(ConditionalStyle(isActive: isActive))

Tövsiyə: sadə şərtlər üçün (göstər/gizlət, rəngi dəyiş) parametrli modifikatordan istifadə edin. Mürəkkəb şərti məntiq üçün müxtəlif modifikator dəstləri ilə — @ViewBuilder daxilində if/else. İkinci yanaşma daha oxunaqlıdır, lakin kodun təkrarlanmasına səbəb ola bilər.

Modifikatorların zəncirləri və kompozisiyası

Modifikatorlar zənciri — bir View-ə tətbiq edilən .modifier() və daxili modifikatorların çağırışları ardıcıllığıdır. Hər çağırış yeni bükülmə qatı yaradır və bütün qatlar iç-içə generiklər vasitəsilə vahid View tipində birləşir.

SwiftUI modifikatorlar zəncirini təmsil etmək üçün tip sistemindən istifadə edir. Məsələn, Text().font(.title).padding()-in tipi ModifiedContent<ModifiedContent<Text, _FontModifier>, _PaddingLayout>. Hər daxili modifikatorun tərtibatçıdan gizlədilmiş öz daxili modifikator strukturu var.

Tip problemi: ModifiedContent tiplərinin dərin iç-içəliyi kompilasiyanı ləngidir və xəta mesajlarını çətinləşdirir. Xüsusi ViewModifier bir neçə qatı “bir” yerə yığmağa, nəticə tipini sadələşdirməyə və kompilasiya sürətini yaxşılaşdırmağa imkan verir. Swift Compiler Team (2024) məlumatlarına görə, 5–7 ardıcıl modifikatoru bir ViewModifier ilə əvəz etmək mürəkkəb View-lər üçün kompilasiya vaxtını 10–20% qısaldır.

Praktiki qayda: View 8-dən çox modifikatordan istifadə edirsə — bir hissəsini xüsusi ViewModifier-ə çıxarın. Bu, kompilasiyanı sürətləndirəcək və oxunaqlılığı yaxşılaşdıracaq.

Tez-tez verilən suallar

SwiftUI-də .modifier() nə edir?

.modifier() View-ə xüsusi ViewModifier tətbiq edir, ModifiedContent qaytarır. Bu, ViewModifier protokolu vasitəsilə yaradılmış istifadəçi modifikatorlarından istifadənin əsas üsulu və daxili modifikatorların birbaşa zəncirlərinə alternativdir.

.modifier() daxili modifikatorlardan nə ilə fərqlənir?

.modifier() ViewModifier protokolunun nümunəsini qəbul edir, istənilən dəyişiklik kombinasiyasını kapsullaşdırmağa imkan verir. Daxili modifikatorlar (font, padding) — sabit məntiqi olan View genişləndirmə metodlarıdır. Performans fərqi minimaldır, seçim təkrar istifadə ilə müəyyən edilir.

.modifier() şərti istifadə oluna bilərmi?

Bəli, if/else vasitəsilə @ViewBuilder daxilində və ya boolean parametrli modifikator vasitəsilə. Birbaşa üçlü operator müxtəlif ModifiedContent tipləri səbəbindən işləmir. Sadə şərtlər üçün parametrli yanaşma, mürəkkəb məntiq üçün if/else tövsiyə olunur.

.modifier() ardıcıllığı nəticəyə necə təsir edir?

Modifikatorlar xaricdən daxilə tətbiq olunur: ilk .modifier() View-i xaricdən bükür, sonrakılar — üstündə. Ardıcıllıq vizual nəticəyə təsir edir, xüsusən overlay, padding və frame ilə işləyərkən.

.modifier() performansa təsir edirmi?

Təsir statistik əhəmiyyətsizdir (render vaxtının 1%-dən az). Üstəlik, bir neçə modifikatoru bir ViewModifier-də qruplaşdırmaq ModifiedContent qatlarının sayını azaltmaqla və tipi kompilyator üçün sadələşdirməklə performansı yaxşılaşdıra bilər.

Xülasə

  • .modifier() — View-ə xüsusi ViewModifier tətbiq etmək üçün metod
  • ModifiedContent — View və modifikatoru birləşdirən nəticə tipi
  • Daxili modifikatorlar — ViewModifier ilə əlaqəli olmayan View genişləndirmə metodları
  • Xüsusi modifikatorlar 3+ yerdə təkrarlanarkən əsaslandırılır
  • Şərti tətbiq — if/else və ya parametrli modifikator vasitəsilə
  • Ardıcıllıq modifikatorların vizual nəticəyə təsir edir
  • Qruplaşdırma bir ViewModifier-də kompilasiyanı 10–20% sürətləndirir

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