Örnek sorular
Ios Swift Type System OptionalsZorluk 1
Bir struct örneği yeni bir değişkene atanıyor, sonra kopyanın property'si değiştiriliyor. Orijinale ne olur?
- aStruct'lar değer semantiğine sahip olduğundan orijinal etkilenmez✓
- bStruct'lar referans olduğundan orijinal de değişir.
- cİki değişken artık çökmüş aynı örneği gösterir
- dAtamanın kendisi derlenmez.
Açıklama:Struct'lar değer tipidir: atama değeri kopyalar, bu yüzden kopyayı değiştirmek orijinali etkilemez; aynı referansı paylaşacak bir class örneğinden farklıdır.
Ios Swift Type System OptionalsZorluk 1
Bir class örneği yeni bir değişkene atanıyor, sonra o yeni değişken üzerinden bir property değiştiriliyor. Orijinale ne olur?
- aOrijinal etkilenmez, class'lar atamada her zaman kopyalanır.
- bProgram atamada hemen çöker.
- cOrijinal de değişikliği yansıtır✓
- dYalnızca deinitializer erken çalışır
Açıklama:Class'lar referans tipidir: atama, altta yatan nesneyi değil referansı kopyalar; bu yüzden iki değişkenden biriyle yapılan değişiklik diğerinde de görünür.
Ios Swift Type System OptionalsZorluk 2
İki Array<Int> değer bağlaması, biri değiştirilene kadar ("copy-on-write") aynı depolamayı paylaşır. Gerçek kopyayı ne tetikler?
- aSadece iki array'den birinin içeriğini okumak.
- bDepolamaya birden fazla referans varken bunlardan birini değiştirmeye çalışmak✓
- cHerhangi bir değişiklikten önce ikinci değişkeni tanımlamak.
- dArray'i bir fonksiyona parametre olarak geçirmek
Açıklama:Copy-on-write, paylaşılan depolamanın yalnızca depolamanın referans sayısı paylaşıldığını gösterdiğinde, değiştirme anında çoğaltıldığı anlamına gelir; sade okumalar veya ekstra bağlamalar tek başına kopyayı tetiklemez.
Ios Swift Type System OptionalsZorluk 1
Bir property'yi var name: String? olarak tanımlamak ne anlama gelir?
- aProperty ya bir String değeri tutabilir ya da yok (nil) olabilir✓
- bProperty'nin her zaman boş olmayan bir String tutacağı garantidir
- cProperty yalnızca bir kez ayarlanabilir ve bir daha değiştirilemez.
- d
? property'yi otomatik olarak thread-safe yapar.
Açıklama:?, tipi Optional<String> olarak işaretler; yani property ya sarmalanmış bir String değeri tutar ya da bir değerin yokluğunu temsil eden nil olur.
Ios Swift Type System OptionalsZorluk 2
let name: String? = nil verildiğinde name?.uppercased() neye eşit olur?
- aRuntime çökmesi, çünkü uppercased() nil üzerinde çağrılıyor
- b
nil, çünkü optional chaining alıcı nil olduğunda kısa devre yapar✓ - cBoş bir string "".
- dChaining force-unwrap gerektirdiğinden derleme zamanı hatası.
Açıklama:Optional chaining, alıcı nil olduğunda metodu çağırmak ya da çökmek yerine güvenle durur ve tüm ifade için nil değerine eşitlenir.
Ios Swift Type System OptionalsZorluk 1
let value = maybeName ?? "default" içinde nil-coalescing operatörü ?? ne yapar?
- a
maybeName'i zorla unwrap eder ve nil ise çöker - bmaybeName ne olursa olsun her zaman "default" döner.
- cmaybeName'i bir if-kontrolü için Bool'a çevirir.
- d
maybeName'in sarmalanmış değeri varsa onu kullanır, yoksa "default"'a düşer✓
Açıklama:?? bir yedek sağlar: soldaki optional bir değer tutuyorsa o kullanılır, yoksa sağdaki varsayılan ifade değerlendirilip kullanılır, hiç çökmeden.