Sobes.tech
Middle

Swift'te açılım nasıl uygulanır (opsiyoneller, sözleşmeler ve diğer mekanizmalar)?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'teki opsiyoneller, T türünde bir değeri içerebilecek veya nil olabilecek bir türü temsil eder; burada nil, değer yokluğunu gösterir.

Opsiyonellerle çalışmak için temel mekanizmalar:

  1. Opsiyonel Bağlama (if let, guard let): Opsiyonelden güvenli değer çıkarma.

    • if let: Opsiyonel bir değeri çıkarır ve geçici bir sabit veya değişkene atar, eğer opsiyonel değer içeriyorsa. Kod bloğu yalnızca bu durumda çalışır.
      let optionalString: String? = "Hello"
      if let unwrappedString = optionalString {
          // unwrappedString String türündedir
      }
      
    • guard let: Değeri çıkarır. Eğer opsiyonel nil ise, else bloğu çalışır (genellikle mevcut kapsamdan çıkmak için). Değer başarıyla çıkarılırsa, guard sonrası mevcut kapsamda erişilebilir olur.
      func processString(_ optionalString: String?) {
          guard let unwrappedString = optionalString else {
              return // Fonksiyondan çık
          }
          // unwrappedString burada String türündedir
      }
      
  2. Opsiyonel Zincirleme (?): Bir opsiyonel üzerinde özellikleri, metodları ve indeksleri çağırmaya izin verir. Zincirde herhangi bir noktada opsiyonel nil ise, zincir kesilir ve sonuç nil içeren opsiyonel türde olur.

    class Person {
        var job: Job?
    }
    
    class Job {
        var salary: Double?
    }
    
    let person: Person? = Person()
    person?.job = Job()
    let salary = person?.job?.salary // salary Double? türündedir
    
  3. Zorunlu Çıkartma (!): Güvensiz değer çıkarma. Opsiyonel nil ise çalışma zamanında hata (crash) ile sonuçlanır. Çok dikkatli kullanılmalı, sadece opsiyonelin nil olmadığı kesin ise.

    let requiredString: String! = "Must be present" // Dolaylı çıkarılan opsiyonel
    let unwrappedString = requiredString! // Zorunlu çıkartma
    
    let dangerousOptional: String? = nil
    // let crash = dangerousOptional! // Hata verir
    
  4. Null Birleştirme Operatörü (??): Opsiyonel nil ise varsayılan değer sağlar.

    let optionalValue: Int? = nil
    let definiteValue = optionalValue ?? 0 // definiteValue 0 olur
    
  5. İmplicitly Unwrapped Optionals (!): Otomatik olarak erişildiğinde çıkarılan opsiyonaller. ! ile bildirilir. Değerin ilk kullanımdan önce atanacağı garanti edilirse kullanılmalı, ancak başlatmada zorunlu değil (örneğin, IBOutlets). Erişim sırasında nil ise çalışma zamanı hatası olur.

    var button: UIButton! // viewDidLoad'da başlatılacağı varsayılır
    // button.setTitle("Tap me", for: .normal) // Kullanım sırasında otomatik çıkarma
    

Bu bağlamdaki "contratlar" Swift'te diğer dillerdeki kontratlar gibi ayrı bir dil mekanizması değildir. Swift, opsiyonaller ve erişim kontrolü dahil olmak üzere güçlü bir tip sistemiyle güvenliği sağlar, bu da niyetleri açıkça ifade etmeye ve hataları önlemeye yardımcı olur. Opsiyonaller, "değer yokluğu" olasılığını belirten bir "contrat" görevi görür.