Swift: Nedir, Sözdizimi ve Dilin Temel Kavramları

Yazar: IT Sectr Yayınlanma: 2026-02-09 Okuma süresi: 8 dk

Swift, Objective-C'nin yerini almak üzere WWDC 2014'te tanıtılan Apple'ın modern programlama dilidir. Swift, güvenli tipleme, otomatik bellek yönetimi ARC (Automatic Reference Counting) ve protokol odaklı yaklaşımı birleştirir. Swift Programming Language, dilin sözdizimi ve standart kütüphanesi için ana kaynaktır.

Önemli Noktalar

  • Swift, tip çıkarımı, Optionals ve Protokol Odaklı Programlama ile statik olarak tiplendirilmiş bir dildir
  • Optionals — Optional Binding (if let) ve Optional Chaining (?.) ile nil ile tür güvenli çalışma
  • ARC — manuel retain/release olmadan bellek yönetimi için otomatik referans sayımı
  • Closure'lar — bağlam yakalayan anonim işlevler, callback API'lerinde ve işlevsel zincirlerde kullanılır
  • Struct vs Class — atama ve kalıtımda farklı davranışa sahip değer türleri vs referans türleri

Swift Nedir?

Swift, Apple tarafından iOS, macOS, watchOS, tvOS ve visionOS için geliştirilmiş çok paradigmalı bir programlama dilidir. Dilin temel hedefleri: güvenlik, hız ve sözdizimsel ifade gücüdür. Swift, LLVM derleyicisini kullanır ve C++ ile karşılaştırılabilir performansa sahip optimize edilmiş makine kodu üretir.

2014'teki lansmanından bu yana Swift, 6 ana sürümden geçti. Swift 6 (2024), eşzamanlı kod izolasyonunun sıkı kontrolü yoluyla eksiksiz bir veri yarışı güvenliği modeli getirdi. GitHub Octoverse 2025'e göre Swift, topluluk büyümesinde ilk 10 dil arasında yer alıyor ve Apple platformlarında benimsenme hızında Rust ve Kotlin'i geride bırakıyor.

Swift açık kaynak ve çapraz platformdur — kaynak kodu GitHub'da (Swift Open Source) yayınlanmıştır. Apple platformlarının yanı sıra Swift, Linux ve Windows'ta sunucu tarafı geliştirme (Vapor, Hummingbird) için kullanılır, ancak ana alanı Apple ekosisteminde mobil ve masaüstü geliştirmedir.

Swift Neden Objective-C'nin Yerini Aldı

Geçişin ana nedenleri: Swift, Objective-C'de mümkün olan hata sınıflarının tamamını ortadan kaldırır. Tür güvenliği, derleme zamanında tür uyuşmazlıklarını önler. Optionals, nil başvuru kaldırmayı ortadan kaldırır. ARC, Objective-C'deki MRC/ARC'nin aksine ilk günden itibaren yerleşiktir. Swift sözdizimi daha kısa ve okunabilirdir — araştırmalar, eşdeğer görevler için Objective-C'ye kıyasla kod hacminde %30-40 azalma göstermektedir.

Sözdizimi ve Temel Yapılar

Temel Swift sözdizimi, tanıdık C benzeri yapıları işlevsel dillerin öğeleriyle birleştirir. Değişkenler var ile, sabitler let ile bildirilir. Derleyici tip çıkarımı kullanır, bu nedenle açık tip ek açıklaması yalnızca belirsizlik durumunda gereklidir.

swift
import Foundation

// Sabitler ve değişkenler
let name = "Swift"
var version = 6.0
var count: Int = 42

// Varsayılan parametreli işlevler
func greet(person: String, greeting: String = "Hello") -> String {
    return "\(greeting), \(person)!"
}

// Erken çıkış için Guard-let
func parse(input: String?) -> Int {
    guard let value = input, let number = Int(value) else {
        return 0
    }
    return number
}

Switch ve desen eşleme Swift'te C ve Kotlin'den daha güçlüdür. Switch, tuple'lar, aralıklar, where koşulları ve değer bağlama ile eşleşmeyi destekler. Derleyici tüm durumların kapsamlı bir şekilde kapsandığını kontrol eder — olası tüm değerler kapsanıyorsa default'un olmaması hata değildir.

swift
let point = (x: 3, y: -1)

switch point {
case (0, 0):
    print("Başlangıç noktası")
case let (x, y) where x == y:
    print("X, Y'ye eşittir")
case let (x, y) where abs(y) > x:
    print("Y'nin mutlak değeri X'ten büyüktür")
default:
    print("Nokta (\(point.x), \(point.y))")
}

Optionals ve nil ile Güvenli Çalışma

Optionals, tür sistemi düzeyinde null referans sorununu çözen Swift'in merkezi bir kavramıdır. Optional, iki durumlu bir enum'dur: .none (nil) ve .some(Wrapped). Derleyici, açık kontrol olmadan Optional kullanımını yasaklayarak tüm bir çalışma zamanı hata sınıfını ortadan kaldırır.

swift
var optionalString: String? = "Hello"
optionalString = nil  // izin verilir

// Optional Binding — güvenli çıkarma
if let text = optionalString {
    print("Metin: \(text)")
} else {
    print("Değer yok")
}

// Optional Chaining — özelliklere güvenli erişim
let length = optionalString?.count ?? 0

// Nil-coalescing operatörü
let greeting = optionalString ?? "Default"

Optional Chaining (?.) operatörü ile isteğe bağlı bir değerin yöntemlerini güvenle çağırmaya ve özelliklerine erişmeye olanak tanır. Zincir nil ile kesilirse, tüm ifadenin sonucu nil olur. Nil-coalescing (??) varsayılan bir değer sağlar ve yer tutucu metin görüntülemek için UI kodunda yaygın olarak kullanılır.

Protokoller ve Uzantılar

Protokoller Swift'te bir sözleşme tanımlar — bir dizi özellik ve yöntem. Java arayüzlerinin aksine, Swift protokolleri protokol uzantıları (protocol extensions) aracılığıyla varsayılan uygulamalara sahip olabilir. Bu, sınıf kalıtımı yerine Apple tarafından önerilen yaklaşım olan Protokol Odaklı Programlamanın temelidir.

swift
protocol NamedEntity {
    var name: String { get }
    func description() -> String
}

// Uzantı yoluyla varsayılan uygulama
extension NamedEntity {
    func description() -> String {
        return "Entity: \(name)"
    }
}

// Uzantı yoluyla uygunluk
extension String: NamedEntity {
    var name: String { return self }
}

Protokol Uzantıları, her uyumlu türü değiştirmeden bir protokole yöntem eklemeye olanak tanır. Bu, ortak yardımcı programlar eklemek için özellikle yararlıdır: Sequence için map, filter, reduce veya JSON serileştirme için Codable. Apple birçok çerçeveyi (SwiftUI, Combine) uzantılı protokoller üzerine inşa etti.

Closure'lar ve İşlevsel Zincirler

Closure'lar Swift'te, dış bağlamdan değişkenleri yakalayan anonim işlevlerdir. Sözdizimsel olarak closure'lar Kotlin'deki lambda'lara benzer ancak daha esnek bir sözdizimine sahiptir: trailing closure, kısa argüman adları ($0, $1) ve autoclosures.

swift
// Bağlam yakalamalı closure
let numbers = [5, 3, 8, 1, 9]

// Trailing closure syntax
let sorted = numbers.sorted { $0 < $1 }

// İşlevsel zincir
let result = numbers
    .filter { $0 > 3 }
    .map { $0 * 2 }
    .reduce(0, +)

// İşlev parametresi olarak closure
func performAsync(completion: @escaping (Result<Data, Error>) -> Void) { }

@escaping closure'lar, closure işlev dönüşünden sonra yürütüldüğünde kullanılır — tipik olarak ağ istekleri ve eşzamansız işlemler için. @autoclosure bir ifadeyi otomatik olarak bir closure'a sarar ve assert ile kısa devre mantığında kullanılır.

Yapılar ve Sınıflar: Karşılaştırma

struct ve class arasındaki seçim, bir Swift modeli tasarlarken verilen ilk kararlardan biridir. Apple, varsayılan olarak struct (değer türü) kullanılmasını ve yalnızca kalıtım veya referans kimliği gerektiğinde class'a (referans türü) geçilmesini önerir.

ÖzellikStructClass
Geçiş türüDeğerle (kopya)Referansla
KalıtımDesteklenmezDesteklenir
ARC yönetimiGerekmezARC (referans sayımı)
Yok edici deinitHayırEvet
DeğişebilirlikÖzellikleri değiştirmek için mutating funcHerhangi bir yöntem değiştirebilir
Koleksiyonlarda depolamaEkleme sırasında kopyalanırReferans depolanır

Değer türleri (struct) çok iş parçacıklı ortamlarda daha güvenlidir — her iş parçacığı bağımsız bir kopya alır. Referans türleri (class) UIKit (UIView, UIViewController) ile çalışmak için gereklidir; burada referans kimliği ve sistem sınıflarından kalıtım gerekir.

ARC Bellek Yönetimi

ARC (Automatic Reference Counting), referans türleri için Swift'in bellek yönetim sistemidir. Derleyici, çalışma zamanında retain/release çağrıları ekleyerek bir nesneye olan güçlü referansların sayısını izler. Sayaç sıfıra ulaştığında nesne hemen serbest bırakılır.

ARC'nin ana sorunu döngüsel referanslardır (retain cycles). İki nesne birbirine güçlü referanslar tuttuğunda, bellek asla serbest bırakılmaz. Çözüm, zayıf referanslar (weak, serbest bırakıldığında otomatik olarak nil olur) ve sahipsiz referanslardır (unowned, nesnenin canlı olduğunu garanti eder).

swift
class ProfileViewController: UIViewController {
    var onLogout: (() -> Void)?
    
    func setupHandler() {
        // [weak self] retain cycle'ı önler
        onLogout = { [weak self] in
            guard let self else { return }
            self.dismiss(animated: true)
        }
    }
}

Closure'larda döngüsel referansları önlemek için [weak self] kullanın ve guard let self = self else { return } ile birlikte kullanın. Bu kural UIKit'te özellikle önemlidir; ViewController özelliklerine güçlü referanslar tutar ve bu özelliklerin içindeki closure'lar ViewController'a başvurur.

Sıkça Sorulan Sorular

Swift'te hangi veri türleri vardır?

Swift, Int, Double, Float, String, Bool, Array, Set, Dictionary ve tuple'ları destekler. Sayısal türlerin sabit boyutu vardır: Int8, Int16, Int32, Int64 ve işaretsiz UInt. Tarihlerle çalışmak için Foundation'dan Date, veriler için Data kullanılır.

Swift'te Optional nedir ve neden gereklidir?

Optional, iki durumlu bir enum'dur: .none (nil) ve .some(Wrapped). Swift, if let, guard let veya ?? ile açık Optional kontrolü gerektirir, bu da NullPointerException'ı ortadan kaldırır. İsteğe bağlı zincirler (?.) iç içe geçmiş isteğe bağlı değerlerin özelliklerine güvenli erişim sağlar.

Swift'te struct, class'tan nasıl farklıdır?

Struct — değer türü, atamada kopyalanır, kalıtımı desteklemez, ARC gerektirmez. Class — referans türü, referansla iletilir, kalıtımı ve yok edicileri destekler. Apple varsayılan tür olarak struct'ı önerir.

Swift'te ARC bellek yönetimi nasıl çalışır?

ARC, sınıf nesnelerine olan güçlü referansları otomatik olarak sayar. Sayaç sıfıra ulaştığında bellek serbest bırakılır. Döngüsel referansları önlemek için weak (otomatik nil) ve unowned (garantili ömür) kullanın. ARC, struct ve enum için geçerli değildir.

Swift'te Protokol Odaklı Programlama nedir?

Protokol Odaklı Programlama, sınıf hiyerarşileri yerine uzantılı protokoller kullanan bir yaklaşımdır. Protokoller, protokol uzantıları aracılığıyla varsayılan yöntem uygulamaları içerebilir. Bu, kalıtım olmadan kodun yeniden kullanılmasını sağlar, esnekliği ve test edilebilirliği korur.

Özet

  • Swift — iOS/macOS geliştirme için Optionals, ARC ve Protokol Odaklı Programlama ile Apple'ın statik olarak tiplendirilmiş dili
  • Optionals — Optional Binding, Optional Chaining ve nil-coalescing operatörü ile nil ile tür güvenli çalışma
  • Protokoller + Uzantılar — varsayılan yöntem uygulamaları ve kompozisyon ile Protokol Odaklı Programlamanın temeli
  • Closure'lar — bağlam yakalama, trailing sözdizimi ve bellek yönetimi için yakalama listeleri ile anonim işlevler
  • Struct vs Class — değer türleri (kopyalama, iş parçacığı güvenliği) karşı referans türleri (kalıtım, ARC)
  • ARC — döngüsel referansları önlemek için weak/unowned değiştiricileri ile otomatik referans sayımı
  • Switch ve desen eşleme — kapsamlı kapsama, tuple eşleme, aralıklar ve where koşulları

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