Örtük Olarak Açılmamış Seçenekler için kullanım durumlarını açıklayabilmeden önce, Swift'te Seçeneklerin ve Örtük Olarak Açılmamış Seçeneklerin ne olduğunu zaten anlamalısınız. Bunu yapmazsanız, önce isteğe bağlı makaleler hakkındaki makalemi okumanızı tavsiye ederim
Örtülü Olarak Açılmamış İsteğe Bağlı Ne Zaman Kullanılmalı
Birinin Örtük Olarak Açılmamış İsteğe Bağlı Olmasının iki ana nedeni vardır. Hepsinin asla erişilmeyecek bir değişken tanımlamasıyla ilgisi vardır, nil
çünkü aksi takdirde Swift derleyicisi sizi her zaman açıkça bir İsteğe bağlı paketini açmaya zorlayacaktır.
1. Başlatma Sırasında Tanımlanamayan Bir Sabit
Başlatma işlemi tamamlandığında her üye sabiti bir değere sahip olmalıdır. Bazen, bir sabit başlatma sırasında doğru değeriyle başlatılamaz, ancak yine de erişilmeden önce bir değere sahip olması garanti edilebilir.
İsteğe bağlı bir değişken kullanıldığında, İsteğe bağlı otomatik olarak başlatıldığı nil
ve sonunda içereceği değer hala değiştirilemeyeceği için bu sorunla karşılaşılır . Ancak, nil olmadığından emin olduğunuz bir değişkeni sürekli olarak açmak bir acı olabilir. Örtülü Olarak Açılmamış Seçenekler, isteğe bağlı olarak, her yerde açıkça açmak zorunda kalmayacağı ek avantajla aynı faydaları elde eder.
Buna en iyi örnek, bir üye değişkenin görünüm yüklenene kadar bir UIView alt sınıfında başlatılamamasıdır:
class MyView: UIView {
@IBOutlet var button: UIButton!
var buttonOriginalWidth: CGFloat!
override func awakeFromNib() {
self.buttonOriginalWidth = self.button.frame.size.width
}
}
Burada, görünüm yüklenene kadar düğmenin orijinal genişliğini hesaplayamazsınız, ancak görünümdeki awakeFromNib
diğer herhangi bir yöntemden önce çağrılacağını bilirsiniz (başlatma dışında). Değeri sınıfınızın her yerinde açık bir şekilde açılmaya zorlamak yerine, değeri Örtük Olarak Açılmamış İsteğe Bağlı olarak bildirebilirsiniz.
2. Uygulamanız Değişken Varlıktan Kurtarılamadığında nil
Bu son derece nadir olmalıdır, ancak bir değişkene nil
erişildiğinde uygulamanız çalışmaya devam edemezse, test etmek için uğraşmak zaman kaybı olacaktır nil
. Normalde, uygulamanızın çalışmaya devam etmesi için kesinlikle doğru olması gereken bir durumunuz varsa, bir assert
. Örtük Olarak Açılmamış Bir İsteğe Bağlı, doğrudan içine yerleştirilmiş nil için bir iddiaya sahiptir. O zaman bile, isteğe bağlı olanın paketini açmak ve sıfırsa daha açıklayıcı bir iddia kullanmak genellikle iyidir.
Örtülü Olarak Paketlenmemiş Bir İsteğe Bağlı Ne Zaman Kullanılmamalıdır?
1. Tembel Hesaplanan Üye Değişkenleri
Bazen hiçbir zaman sıfır olmaması gereken bir üye değişkeniniz olabilir, ancak başlatma sırasında doğru değere ayarlanamaz. Çözümlerden biri Örtüklenmemiş Sarılmış İsteğe Bağlı kullanmaktır, ancak daha iyi bir yol tembel bir değişken kullanmaktır:
class FileSystemItem {
}
class Directory : FileSystemItem {
lazy var contents : [FileSystemItem] = {
var loadedContents = [FileSystemItem]()
// load contents and append to loadedContents
return loadedContents
}()
}
Şimdi, üye değişkeni contents
ilk erişilene kadar başlatılmaz. Bu, başlangıç değerini hesaplamadan önce sınıfa doğru duruma girme şansı verir.
Not: Bu, yukarıdaki # 1 ile çelişiyor gibi görünebilir. Ancak yapılması gereken önemli bir ayrım var. Özelliklere buttonOriginalWidth
erişmeden önce düğmelerin genişliğini değiştirmeyi önlemek için viewDidLoad sırasında yukarıdakilerin ayarlanması gerekir.
2. Başka Her Yerde
Çoğunlukla, yanlışlıkla kullanılırsa, uygulamanıza erişilirken tüm uygulamanız kilitleneceğinden Örtülü Olarak Açılmamış Seçeneklerden kaçınılmalıdır nil
. Bir değişkenin sıfır olup olmayacağından emin değilseniz, her zaman varsayılan bir İsteğe bağlı kullanmayı varsayılan olarak kullanın. nil
Kesinlikle olmayan bir değişkeni açmak kesinlikle çok fazla acıtmaz.
if someOptional
. Artık kullanamazsınız .