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:
-
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 opsiyonelnilise,elsebloğu çalışır (genellikle mevcut kapsamdan çıkmak için). Değer başarıyla çıkarılırsa,guardsonrası mevcut kapsamda erişilebilir olur.func processString(_ optionalString: String?) { guard let unwrappedString = optionalString else { return // Fonksiyondan çık } // unwrappedString burada String türündedir }
-
Opsiyonel Zincirleme (
?): Bir opsiyonel üzerinde özellikleri, metodları ve indeksleri çağırmaya izin verir. Zincirde herhangi bir noktada opsiyonelnilise, zincir kesilir ve sonuçniliç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 -
Zorunlu Çıkartma (
!): Güvensiz değer çıkarma. Opsiyonelnilise çalışma zamanında hata (crash) ile sonuçlanır. Çok dikkatli kullanılmalı, sadece opsiyonelinnilolmadığı 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 -
Null Birleştirme Operatörü (
??): Opsiyonelnilise varsayılan değer sağlar.let optionalValue: Int? = nil let definiteValue = optionalValue ?? 0 // definiteValue 0 olur -
İ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ındanilise ç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.