Bir isteğe bağlı ya ayarlanmış ya da ayarlanmamıştır (sıfır ya da sıfır değil) ... bizi önemli bir kararla bırakıyor. "Kodumuzu her iki durumda da 2 durum için doğru çalışacak şekilde nasıl yazmalıyız?". İsteğe bağlı olanı açma şeklimiz, bizim için buna karar verir.
İsteğe bağlı olarak ayarlanmayan bir seçeneğe karşı koymak için kullanabileceğiniz birkaç yaklaşım vardır.
- Crash!
- Değeri bir şeye varsayılan olarak ayarlayın - ayarlanmamışsa.
- Gracefully yani hiçbir şey başarısız değil, aynı zamanda eğer değerin ayarlandığı, daha sonra atayın.
- İncelikle yani ancak hiçbir şey başarısız olursa (tek atama sadece daha var) bir şeyler yapmak ... değer ayarlandı.
Aşağıda 4 yaklaşım bulunmaktadır
Kullanılması zorunlu unwrapping kilitlenmesine eğer bir değeri yoktur. Bu değere sahip olmak hayati önem taşıyorsa, örneğin bir filmin başlığı (her filmin bir adı OLMALIDIR) bunu yapmak isteyebilirsiniz . !
zorla sarmalamak için kullanılır.
movieTitle = movie.title!
Sıfır birleştirme kullanmak size daha fazla kontrol sağlayacak başka bir yoldur , yani değer ayarlanmadıysa çökmez veya ayarlanmazsa 'hiçbir şey ayarlamaz' ... Söylediğinizi yapardı. yapmak için, örneğin bir ad ayarlanmamışsa filmin adını varsayılan olarak / untitled_movie olarak ayarlar. ??
sıfır birleştirme için kullanılır.
var movieTitle = movie.title ?? "untitled_Movie"
Kullanımı isteğe bağlı zincirleme hiçbir şey yapmayacak eğer bir değeri olmayan ve değeri olacaktır eğer bir değeri vardır. Bunu, değer setine sahip olmanın hayati önemi olmayan bir şey için yaparsınız, örneğin oyuncunuzun temsilcisinin adı için . ?
isteğe bağlı zincirleme için kullanılır.
let agent = movie.leadActor?.agent
let agent = movie.leadActor!.agent
Kullanmak if-let
(veya guard
iki farklı isteğe bağlı bağlama türü ) size daha fazla kontrol sağlar , değer ayarlanmadıysa çökmez. Değer ayarlanmışsa, bir şeyler yapabilirsiniz. Ayarlanmamışsa, bir else
ifade ekleyebilirsiniz .
if let supportingActor = movie.supportingActor{
print(" The supporting actor is \(supportingActor)}
Zorla sarmayı açmanın bir şekilde önerilmemesi nedeniyle, sarmayı açmanın en yaygın kullanılan yolu budur. Neden cesaretinin kırıldığı hakkında daha fazla tartışma için buraya bakın . Arasında iyi bir karşılaştırma için guard
ve if-let
bkz.guard vs. if-let
Kenar notu:
İsteğe bağlı bağlama ve isteğe bağlı zincirleme genellikle birlikte kullanılır:
if let agent = movie.leadActor?.agent {
ContactInfo = agent.phoneNumber
}