ViewModifier: nedir, SwiftUI'de View değiştiricileri

Yazar: IT Sectr Yayınlanma: 2026-06-24 Okuma süresi: 6 dk

ViewModifier, SwiftUI'de View'lerin görünümünü ve davranışını değiştirmek için yeniden kullanılabilir değiştiriciler oluşturmayı sağlayan bir protokoldür. Apple Developer Documentation, 2024'e göre, ViewModifier, orijinal View'i alan ve değiştirilmiş bir View döndüren, yerleşik değiştiricilerin herhangi bir kombinasyonunu tek bir türde kapsülleyen body(content:) yönteminin uygulanmasını gerektirir. Bu protokol olmadan, geliştiriciler her kullanım noktasında aynı değiştirici zincirlerini tekrarlamak zorunda kalırdı.

Önemli noktalar

  • ViewModifier — SwiftUI'de özel View değiştiricileri oluşturmak için protokol
  • body(content:) — değiştirilmiş View döndüren tek zorunlu yöntem
  • Yerleşik değiştiriciler (font, padding) — View uzantı yöntemleri, ViewModifier uygulamaz
  • Özel değiştiriciler tekrarlanan stil kombinasyonlarını kapsüllemeye izin verir
  • ModifiedContent — ViewModifier bir View'e uygulandığında döndürülen tür

SwiftUI'de ViewModifier nedir?

ViewModifier, herhangi bir View türüne uygulanabilen değiştiriciler oluşturmak için bir sözleşme tanımlayan bir SwiftUI protokolüdür. protocol ViewModifier { associatedtype Body: View; func body(content: Content) -> Body } şeklinde bildirilir; burada Content, değiştiriciye iletilen orijinal View'in türüdür.

ViewModifier protokolü, SwiftUI'nin ilk sürümüyle birlikte iOS 13'te ortaya çıktı ve iOS 18+ dahil olmak üzere kararlı kalmaya devam ediyor. Ana amaç, geliştiricilere tekrarlanan değiştirici zincirlerini tek bir yeniden kullanılabilir türde kapsüllemek için bir mekanizma sağlamaktır. ViewModifier olmadan, aynı stil kümesini her uygulamanız gerektiğinde tüm değiştiricileri manuel olarak tekrarlamanız gerekirdi.

Swift by Sundell (2023)'e göre ViewModifier, aynı değiştirici kümesi üç veya daha fazla yerde kullanıldığında SwiftUI projelerinde stilleri düzenlemenin tercih edilen yoludur. Tek seferlik kombinasyonlar için, doğrudan View üzerinde bir yerleşik değiştirici zinciri yeterlidir.

Protokol sözdizimi

ViewModifier protokolü, bir body(content:) yönteminin uygulanmasını gerektirir ve isteğe bağlı olarak özel değiştiricinin başlatıcı parametreleri aracılığıyla davranışı özelleştirmek için özellikler sağlayabilir.

ViewModifier protokolü nasıl çalışır

ViewModifier protokolü, orijinal View'i (Content türü) alan ve değiştirilmiş bir View (Body türü) döndüren body(content:) yöntemini tanımlar. SwiftUI, değiştiriciyi View'e content olarak ileterek uygular ve sonucu görüntüleme için kullanır.

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)
    }
}

// Kullanım:
Text("Merhaba, SwiftUI!")
    .modifier(CardStyle())

.modifier(CardStyle()) çağrısını yaptığınızda, SwiftUI orijinal View'i ve değiştiriciyi depolayan bir ModifiedContent<Text, CardStyle> örneği oluşturur. Oluşturma sırasında SwiftUI, CardStyle.body(content: text) çağrısını yaparak padding, background, cornerRadius ve shadow ile değiştirilmiş bir View elde eder.

Önemli ayrım: ViewModifier.body, View her güncellendiğinde çağrılır, bu nedenle body içinde ağır hesaplamalar veya yan etkiler olmamalıdır. Değiştirici harici verilere (state, environment) bağlıysa, bunları başlatıcı parametreleri aracılığıyla iletin.

Yerleşik ve özel değiştiriciler: farklar

SwiftUI'nin yerleşik değiştiricileri (font, foregroundColor, frame, padding), ModifiedContent türünü döndüren View protokolünün uzantı yöntemleridir. Doğrudan ViewModifier uygulamazlar — SwiftUI, her yerleşik değiştirici için dahili optimize edilmiş uygulamalar kullanır.

ÖzellikYerleşik değiştiricilerÖzel ViewModifier
UygulamaView uzantı yöntemleriViewModifier protokolü
Yeniden kullanımTek seferlik zincirBirden çok kullanım
ParametrelerSabit (renk, boyut)Başlatıcı aracılığıyla herhangi biri
PerformansMaksimum (dahili optimizasyonlar)Biraz daha yüksek ek yük
Dönüş türüModifiedContentModifiedContent

Özel ViewModifier, aynı değiştirici kombinasyonu iki veya daha fazla yerde kullanıldığında haklıdır. Tek seferlik kullanımlar için doğrudan değiştirici zinciri tercih edilir — kod okunabilir kalır ve derleyici daha iyi optimize eder.

WWDC 2023'e göre Apple, uygulamanın tasarım sistemiyle ilgili stiller için özel ViewModifier oluşturulmasını önerir: kartlar, düğmeler, giriş alanları. Bu, tutarlılık sağlar ve tasarım değiştiğinde bakımı basitleştirir.

ViewModifier kullanım şablonları

Şablon 1: tasarım sistemi kapsüllemesi. ViewModifier'ın en yaygın kullanım durumu, bir uygulamadaki görsel stiller için tek bir doğru kaynağı oluşturmaktır. Her tasarım sistemi öğesi (kart, düğme, başlık) kendi değiştiricisini 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)
    }
}

Şablon 2: koşullu değiştirici uygulaması. Bazen bir değiştiriciyi yalnızca belirli bir koşul altında uygulamanız gerekir. Boolean parametresine sahip bir ViewModifier, bu mantığı body içinde kapsüllemeye izin verir.

Şablon 3: değiştirici kompozisyonu. Bir ViewModifier, kendi body'si içinde başka ViewModifier'lar uygulayabilir. Bu, her birinin görsel sunumun kendi yönünden sorumlu olduğu bir değiştirici hiyerarşisi oluşturmayı sağlar. Örneğin, CardStyle dahili olarak ShadowStyle ve BorderStyle uygulayabilir.

Point-Free (2024)'e göre, ViewModifier aracılığıyla değiştirici kompozisyonu, kalıtıma tercih edilir: her değiştirici bir görevden sorumludur ve bağımsız olarak birleştirilebilirler. Bu, SwiftUI'de tek sorumluluk ilkesini takip eder.

Performans ve değiştirici kompozisyonu

ViewModifier'ın performansı, her uygulamada oluşturulan ModifiedContent sarmalayıcılarının sayısına bağlıdır. SwiftUI, oluşturma aşamasında diffing yoluyla değiştirici zincirlerini optimize eder, ancak aşırı sayıda değiştirici güncellemeleri yavaşlatabilir.

Değiştirici sayısıPerformans etkisiÖneri
1–5MinimumHerhangi bir View için normal
5–10OrtaViewModifier'da grupla
10–20Fark edilirTek bir özel değiştiricide birleştir
20+KritikView mimarisini yeniden düşün

Optimizasyon: aynı türden birden çok sıralı değiştiriciyi (örneğin birden çok padding) tek bir değiştiricide birleştirin. PreferenceKey'i yalnızca gerçekten gerekli olduğunda kullanın — tercihleri okuyan değiştiriciler ek bir oluşturma geçişini tetikler.

Temel kural: bir View'de 10'dan fazla değiştirici varsa — bunlardan bazılarını özel bir ViewModifier'a çıkarın. Bu, okunabilirliği artıracak ve SwiftUI'nin güncellemeleri optimize etmesine izin verecektir. SwiftUI Lab (2024)'e göre, değiştiricileri bir ViewModifier'da gruplamak, karmaşık View'ler için oluşturma süresini %15–30 oranında azaltır.

Sıkça sorulan sorular

SwiftUI'de ViewModifier nedir?

ViewModifier, bir View'in görünümünü veya davranışını değiştiren yeniden kullanılabilir değiştiriciler oluşturmak için bir protokoldür. body(content:) yönteminin uygulanmasını gerektirir, orijinal View'i alır ve değiştirilmiş bir View döndürür.

ViewModifier yerleşik değiştiricilerden nasıl farklıdır?

Yerleşik değiştiriciler (font, padding), dahili optimize edilmiş uygulamaları kullanan View protokolünün uzantı yöntemleridir. ViewModifier, yerleşiklerin bir kombinasyonunu kapsülleyen ve başlatıcı parametrelerine sahip olabilen özel değiştiriciler için bir protokoldür.

Ne zaman özel bir ViewModifier oluşturmalıyım?

Aynı değiştirici kombinasyonu üç veya daha fazla yerde kullanıldığında özel bir ViewModifier oluşturun. Tek seferlik zincirler için doğrudan View üzerinde değiştiriciler kullanın — daha basit ve daha verimlidir.

ViewModifier State içerebilir mi?

Evet, ViewModifier @State veya @Environment özellikleri içerebilir. SwiftUI, yaşam döngülerini View ile aynı şekilde yönetir. Ancak, body'nin her güncellemede çağrıldığını unutmayın, bu nedenle değiştirici gövdesinde ağır işlemlerden kaçının.

ViewModifier koşullu olarak nasıl uygulanır?

@ViewBuilder içinde if/else kullanın veya body içinde koşullu olarak değişiklikleri uygulayan veya atlayan boolean parametresine sahip bir değiştirici oluşturun. Örneğin, yukarıdaki PrimaryButton, koşullu stil uygulaması için isEnabled kullanır.

Özet

  • ViewModifier — yeniden kullanılabilir View değiştiricileri oluşturmak için SwiftUI protokolü
  • body(content:) — orijinal View'i alıp değiştirilmiş View döndüren yöntem
  • Yerleşik değiştiriciler — View uzantı yöntemleri, ViewModifier uygulamaz
  • ModifiedContent — orijinal View'i ve uygulanan değiştiriciyi depolayan tür
  • Özel değiştiriciler kombinasyon 3+ yerde tekrarlandığında haklıdır
  • ViewModifier aracılığıyla değiştirici kompozisyonu kalıtıma tercih edilir
  • Değiştiricileri ViewModifier'da gruplamak performansı %15–30 artırır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun