SwiftUI: nedir, temel kavramlar ve View Protocol

Yazar: IT Sectr Yayınlanma: 2026-04-30 Okuma süresi: 8 dk

SwiftUI, Apple ekosistemindeki tüm platformlarda kullanıcı arayüzleri oluşturmak için Apple tarafından sunulan bildirimsel bir framework'tür. Adımları zorunlu olarak tanımlamak yerine, geliştirici arayüzün nasıl görünmesi gerektiğini bildirir ve SwiftUI bunun oluşturulmasını ve güncellenmesini yönetir. Apple Developer Documentation (2025)'a göre SwiftUI, iOS 15+, iPadOS 15+, macOS 12+, watchOS 8+ ve tvOS 15+'ı destekler ve tüm arayüz bileşenleri için temel yapı taşı olarak View Protocol'ü kullanır.

Önemli Noktalar

  • SwiftUI, geliştiricinin arayüzü tanımladığı ve güncellemelerin otomatik olarak yapıldığı bildirimsel bir Apple framework'üdür.
  • View Protocol, body özelliği ile herhangi bir SwiftUI UI bileşeninin temelidir ve görünüm kompozisyonu aracılığıyla bir ekran tanımı döndürür.
  • Property Wrappers — @State, @Binding, @ObservedObject, @StateObject — durumu yönetir ve veri değiştiğinde yeniden çizimi tetikler.
  • NavigationStack (iOS 16+), tür güvenli rotalar ve bildirimsel geçişlerle modern bir navigasyon API'sidir.
  • Modifier, sınıf kalıtımı olmadan görünümlerin görünümünü ve davranışını özelleştirmek için bir çağrı zinciridir.

SwiftUI Nedir?

SwiftUI, Apple tarafından 2019 yılında yeni projelerde UIKit'in yerini almak üzere tanıtılan bildirimsel bir framework'tür. UIView örneklerini manuel olarak oluşturup hiyerarşiye eklemek yerine, geliştirici View protokolüne uyan yapılar aracılığıyla arayüzü tanımlar. SwiftUI, mevcut durum ile yeni durum arasındaki farkı otomatik olarak hesaplar ve kendi işleme motorunu kullanarak yalnızca değişen kısımları yeniden çizer.

Framework, değer semantiği (sınıflar değil yapılar) kullanılarak Swift ile yazılmıştır ve UI bileşenlerini hafif ve iş parçacığı güvenli hale getirir. Objective-C çalışma zamanı nedeniyle UIViewController'ın 200+ bayt olabileceği UIKit'in aksine, bir SwiftUI View yalnızca birkaç bayt boyutunda basit bir yapıdır. Bu, sınırlı belleğe sahip watchOS için özellikle önemlidir.

SwiftUI Çapraz Platform

Aynı View tanımı iPhone, iPad, Mac, Apple Watch, Apple TV ve Apple Vision Pro'da çalışır. SwiftUI arayüzü platforma göre uyarlar: iOS'ta dokunma hareketleri, macOS'ta klavye kombinasyonları, watchOS'ta Digital Crown kaydırma. Bu, birden çok Apple platformunda uygulama yayınlayan şirketler için geliştirme süresini azaltır, ancak her platforma özgü öğeler için ek yapılandırma gerektirir.

View Protocol ve Görünüm Gövdesi

SwiftUI'de her ekran, View protokolünü tek bir gereksinimle uygulayan bir yapıdır: some View türünde hesaplanmış bir body özelliği. some anahtar kelimesi (opak tür), somut görünüm türünü gizleyerek SwiftUI'in işlemeyi optimize etmesine olanak tanır. body içinde geliştirici, birden çok görünümü bir araya getiren ViewBuilder'ı kullanarak hazır bileşenleri — Text, Image, Button, List — birleştirir.

swift
struct GreetingView: View {
    let name: String

    var var body: some View {
        VStack {
            Text("Merhaba, \(name)!")
                .font(.title)
                .foregroundColor(.blue)
            Image(systemName: "hand.wave")
                .imageScale(.large)
        }
        .padding()
    }
}

Örnekte VStack (dikey yığın) Text ve Image içerir. name değeri yapı başlatıcı aracılığıyla iletilir — SwiftUI'de harici DI kapsayıcıları olmadan DI (Bağımlılık Enjeksiyonu) böyle çalışır. Her değiştirici, orijinali değiştirmeden uygulanan değişiklikle birlikte yeni bir görünüm döndürür. Bu, değer türlerinin değişmezliği sayesinde mümkündür.

ViewBuilder ve Koşullu İfadeler

ViewBuilder, @resultBuilder ile açıklanmış bir sonuç oluşturucudur ve 10'a kadar görünümü bir araya getirir. body içinde ek sarmalayıcılar olmadan if/else, switch ve ForEach kullanılabilir. ForEach, Identifiable öğelerle çalışır — ekleme/silme sırasında doğru animasyon için her görünüme benzersiz bir kimlik atanır.

Durum Yönetimi: @State, @Binding, @ObservedObject

SwiftUI'de durum, ekranda hangi içeriğin görüntüleneceğini belirler. Durum değiştiğinde, SwiftUI bağımlı görünümün body'sini yeniden oluşturur ve bir diff algoritması kullanarak sonucu öncekiyle karşılaştırır. Durumu depolamak için özellik sarmalayıcıları kullanılır — her biri belirli görevini çözer: yerel durum, alt görünümle bağlantı veya harici veri modeli.

swift
struct CounterView: View {
    @State private var count = 0

    var var body: some View {
        VStack {
            Text("Sayaç: \(count)")
            Button("Artır") {
                count += 1
            }
        }
    }
}

class UserViewModel: ObservableObject {
    @Published var name = ""
    @Published var age = 0
}

@State, View yapısı içinde yerel basit bir değer (Int, String, Bool) depolar. SwiftUI, belleği yapıdan ayrı bir depolama alanına taşır — bu nedenle @State ile bir özellik, View bir değer türü olsa bile değiştirilebilir. @ObservableObject, @Published özelliklerine sahip sınıflar içindir ve bunların değişiklikleri, SwiftUI'ye yeniden çizim gerekliliği konusunda otomatik olarak bildirimde bulunur.

@Binding ve Ebeveyn-Çocuk Bağlantısı

@Binding, ebeveyn görünümünde bulunan bir veri kaynağıyla iki yönlü bir bağlantı oluşturur. Ebeveyn $variable (yansıtılan değer) iletir ve çocuk bağlama aracılığıyla değeri okur ve yazar. Bu, durumu ebeveynde tutarken metin girişi veya anahtarı ayrı bir bileşene taşımaya olanak tanır. @Binding olmadan, her değişiklik yeni değeri yukarı iletmek için bir geri çağırma closure'ı gerektirirdi.

iOS 16'dan önce, SwiftUI'de navigasyon NavigationView üzerine inşa edilmişti — iPad'de karmaşık davranışa (bölünmüş görünüm, çift sütun) sahip eski bir API. iOS 16'dan itibaren Apple, NavigationStack'i önermektedir — tür güvenli rotalara sahip basitleştirilmiş bir alternatif. Geliştirici olası rotaların bir enum'unu tanımlar ve NavigationStack, derin bağlantılar ve köke dönüş desteğiyle ekran yığınını otomatik olarak yönetir.

swift
enum Route: Hashable {
    case detail(id: Int)
    case settings
}

struct ContentView: View {
    var var body: some View {
        NavigationStack {
            List {
                NavigationLink("Detay ekranı",
                               value: Route.detail(id: 42))
                NavigationLink("Ayarlar",
                               value: Route.settings)
            }
            .navigationDestination(for: Route.self) { route in
                switch route {
                case .detail(let id): DetailView(id: id)
                case .settings: SettingsView()
                }
            }
        }
    }
}

Hashable'a uygun rotalar, parametre iletmek için herhangi bir veri türünün kullanılmasına izin verir. navigationDestination(for:destination:), rota türünü hedef görünümle ilişkilendirir. UIKit navigasyonuna göre avantajı, yeni bir rota eklerken yeniden çizim gerekmemesidir: enum'a bir case ve switch'e bir işleyici eklemek yeterlidir. Derin bağlantılar NavigationStack'te processDeepLink aracılığıyla işlenir.

Programatik Navigasyon

Programatik navigasyon (giriş, zamanlayıcı veya sunucu yanıtından sonra) için NavigationLink başlatıcısıyla @State kullanılır: NavigationLink(isActive: $isActive). isActive = true olduğunda, geçiş kullanıcı dokunuşu olmadan gerçekleşir. Bir alternatif, NavigationStack'te $path dizisini bağlamaktır: $path.append(Route.detail(id: 1)).

View Modifier — Görünüm Özelleştirme

Modifier, görünümün değiştirilmiş bir kopyasını döndüren bir yöntemdir. Özellik yapılandırmasının mevcut bir görünümü değiştirerek yapıldığı UIKit'in aksine, SwiftUI uygulanan değişiklikle yeni bir değer oluşturur. Değiştirici zincirleme, sıralı dönüşümlerden nihai arayüzü oluşturur: yazı tipi → dolgu → renk → gölge → jest.

Apple, 200'den fazla yerleşik değiştirici sağlar. En yaygın olanlar: .font(), .foregroundColor(), .padding(), .background(), .cornerRadius(), .shadow(), .opacity(), .offset(). Değiştiricilerin sırası önemlidir: .padding()'den önce .background() dolgulu alanı doldurur, sonra — yalnızca iç alanı. Özel değiştiriciler ViewModifier protokolü aracılığıyla oluşturulur.

Koşullu Değiştiriciler ve Animasyon

Değiştiriciler, üçlü operatör aracılığıyla koşullu olarak uygulanabilir: .foregroundColor(isError ? .red : .primary). Animasyon için .animation(.easeInOut, value: state) kullanılır — animasyon değiştiricisi belirli bir durum özelliğine bağlanır. Bu özellik değiştiğinde, SwiftUI eski ve yeni değer arasındaki geçişi canlandırır. Animasyon, opacity, offset, scale, rotation, boyut ve renk ile çalışır — her özelliğin karşılık gelen bir AnimatableParameter'ı vardır.

Özel animasyonlar için .transition (görünme/kaybolma) ve .matchedGeometryEffect (bir öğenin iki kapsayıcı arasında yumuşak geçişi) mevcuttur. İkincisi, listelerde kahraman animasyonu için kullanılır: bir liste hücresindeki simge, ayrıntı ekranında büyük bir görüntüye yumuşak bir şekilde dönüşür.

SwiftUI vs UIKit: Yaklaşımların Karşılaştırması

SwiftUI ve UIKit arasındaki seçim, iOS geliştiricisinin ilk ikilemlerinden biridir. Her iki framework de Apple tarafından desteklenir ancak arayüz oluşturma sorununu temelde farklı şekillerde çözer: SwiftUI bildirimsel olarak, UIKit zorunlu olarak. Fark, durum yönetimi, navigasyon, performans ve uyumlulukta kendini gösterir.

YönSwiftUIUIKit
YaklaşımBildirimsel: ne gösterileceğiZorunlu: nasıl oluşturulacağı
DurumProperty Wrappers, otomatik yeniden çizimManuel: reloadData, setNeedsLayout
UI KoduKompakt, değiştirici zincirleriAyrıntılı, NSCoder/Storyboard/kısıtlamalar
PerformansiOS 17+'da yüksek, diff algoritmasıiOS 12–16'da zirve, doğrudan kontrol
Minimum SürümiOS 15+ (tam destek)iOS 2+ (tüm sürümler)

Minimum iOS 17 sürümüne sahip yeni projeler için Apple, SwiftUI'yi birincil framework olarak önerir. UIKit, işleme üzerinde ince ayar kontrolü (özel UICollectionViewLayout, karmaşık CAAnimation sahneleri) veya iOS 12–14 desteği gerektiren arayüzler için gerekli olmaya devam eder. Birçok proje hibrit bir yaklaşım kullanır: UIHostingController aracılığıyla SwiftUI bir UIKit uygulamasına gömülür ve UIViewRepresentable, SwiftUI hiyerarşisi içinde UIKit bileşenlerinin kullanılmasına izin verir.

Sıkça Sorulan Sorular

Aynı projede SwiftUI ve UIKit birlikte kullanılabilir mi?

Evet, UIHostingController (SwiftUI in UIKit) ve UIViewRepresentable (UIKit in SwiftUI) aracılığıyla. Bu, geçiş sırasında popüler olan hibrit bir yaklaşımdır.

SwiftUI projesine hangi iOS sürümünden başlanmalı?

iOS 17 tam işlevsellik sağlar: NavigationStack, Observation framework, Swift Charts. iOS 15, üretim için minimum eşiktir.

SwiftUI bazen arayüzü neden güncellemez?

En yaygın neden, bir arka plan iş parçacığında @Published özelliğini değiştirmektir. ObservableObject, değişiklikleri main actor üzerinde göndermelidir: @MainActor class ViewModel.

SwiftUI'de bir düğmeye basma debounce'u nasıl işlenir?

Combine aracılığıyla .debounce kullanın: Button.publisher(for: .tap) .debounce(for: .seconds(0.3), scheduler: RunLoop.main).

SwiftUI özel jestleri destekliyor mu?

Evet, Gesture değiştiricileri aracılığıyla: DragGesture, LongPressGesture, MagnificationGesture, RotationGesture. .simultaneousGesture() ve .sequenced() kullanarak birleştirin.

Özet

  • SwiftUI, arayüzün durum yönetimi için özellik sarmalayıcılarıyla View yapılarının bir bileşimi olarak tanımlandığı bildirimsel bir Apple framework'üdür.
  • View Protocol ve hesaplanmış body özelliği, herhangi bir görünüm için tek giriş noktasıdır. ViewBuilder, ek kapsayıcılar olmadan 10'a kadar görünümü bir araya getirir.
  • @State, @Binding ve @ObservedObject, tüm veri yönetimi senaryolarını kapsar: yerel durum, ebeveyn-çocuk bağlantısı ve harici modeller.
  • NavigationStack, tür güvenli enum rotalarıyla NavigationView'ın yerini alarak derin bağlantılar ve programatik navigasyon desteği ekledi.
  • Modifier, kalıtım olmadan bir çağrı zinciri aracılığıyla görünümlerin görünümünü özelleştirmeye olanak tanıyan önemli bir SwiftUI modelidir.
  • SwiftUI ve UIKit, UIHostingController ve UIViewRepresentable aracılığıyla bir arada bulunur ve kademeli proje geçişine olanak tanır.
  • iOS 17+ için Apple, SwiftUI'yi birincil framework olarak önerir; UIKit, karmaşık özel arayüzler ve eski sürüm desteği için kalı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