Swift, tip güvenliğe yüksek bir prim verir. Swift dilinin tamamı güvenlik göz önünde bulundurularak tasarlanmıştır. Swift'in ayırt edici özelliklerinden biridir ve açık kollarla hoş karşılanmalısınız. Temiz, okunabilir kodun geliştirilmesine yardımcı olur ve uygulamanızın çökmesini engeller.
Swift'teki tüm seçenekler ?
sembolle sınırlandırılmıştır . Ayarlayarak ?
aslında olan isteğe bağlı olarak ilan edildiği türün adını sonra döküm türü olarak bu değil ki öncedir ?
ama bunun yerine, isteğe bağlı tip.
Not: Bir değişken veya tür Int
ile aynı değildirInt?
. Birbirlerine çalıştırılamayan iki farklı tiptir.
İsteğe Bağlı Kullanma
var myString: String?
myString = "foobar"
Bu mu değil sen bir tür ile çalışan anlamına String
. Bu, bir tür String?
(İsteğe Bağlı Dize veya İsteğe Bağlı Dize) ile çalıştığınız anlamına gelir . Aslında, ne zaman
print(myString)
çalışma zamanında, hata ayıklama konsolu yazdırılır Optional("foobar")
. " Optional()
" Kısmı, bu değişkenin çalışma zamanında bir değere sahip olabileceğini veya olmayabileceğini gösterir, ancak şu anda "foobar" dizesini içeriyor. Bu " Optional()
" gösterge, isteğe bağlı değer "paketini açma" olarak adlandırılan şeyi yapmadığınız sürece kalacaktır.
İsteğe bağlı paketin kaldırılması , artık bu türü isteğe bağlı olmayan olarak yayınladığınız anlamına gelir. Bu yeni bir tür oluşturur ve bu isteğe bağlı olarak bulunan değeri yeni isteğe bağlı olmayan türe atar. Bu şekilde, derleyici tarafından katı bir değere sahip olması garanti edildiği için, bu değişken üzerinde işlem yapabilirsiniz.
Koşullu olarak Açma , isteğe bağlı değerin olup olmadığını kontrol eder nil
. Değilse nil
, değer ve atanacak yeni oluşturulan sabit değişken olacaktır Çizelgesi isteğe bağlı olmayan sabiti içine. Ve oradan if
blokta isteğe bağlı olmayanları güvenle kullanabilirsiniz .
Not: Koşullu olarak açılmamış sabitinize, açtığınız isteğe bağlı değişkenle aynı adı verebilirsiniz.
if let myString = myString {
print(myString)
// will print "foobar"
}
Koşullu olarak açılma seçenekleri, isteğe bağlı bir değere erişmenin en temiz yoludur, çünkü bir nil değeri içeriyorsa, if let bloğundaki her şey yürütülmez. Elbette, herhangi bir if ifadesi gibi, başka bir blok da ekleyebilirsiniz
if let myString = myString {
print(myString)
// will print "foobar"
}
else {
print("No value")
}
Zorla Açma!
("bang") operatörü olarak bilinen şey kullanılarak yapılır . Bu daha az güvenlidir ancak yine de kodunuzun derlenmesine izin verir. Ancak patlama operatörünü her kullandığınızda, değişkeninizin zorla açmadan önce gerçekte katı bir değer içerdiğinden% 1000 emin olmalısınız.
var myString: String?
myString = "foobar"
print(myString!)
Bu tamamen geçerli Swift kodudur. Bunun myString
"foobar" olarak ayarlanmış değerini yazdırır . Kullanıcı foobar
konsolda yazdırılmış görürdü ve hepsi bu kadar. Ancak değerin asla ayarlanmadığını varsayalım:
var myString: String?
print(myString!)
Şimdi elimizde farklı bir durum var. Objective-C'den farklı olarak, isteğe bağlı bir şekilde zorla açma girişiminde bulunulduğunda ve isteğe bağlı ayarlanmadı ve nil
uygulamanızın içinde ne olduğunu görmek için isteğe bağlı olanı açmaya çalıştığınızda.
Tip Döküm ile Ambalajdan Çıkarma . Daha önce de belirttiğimiz gibi unwrapping
, isteğe bağlı olduğunuzda, aslında isteğe bağlı olmayan bir türe döküm yapıyorsunuz, isteğe bağlı olmayanı farklı bir türe de dökebilirsiniz. Örneğin:
var something: Any?
Kodumuzda bir yerlerde değişken something
bir değerle ayarlanır. Belki jenerikler kullanıyoruz ya da belki de bunun değişmesine neden olacak başka bir mantık var. Kodumuzda daha sonra kullanmak istiyoruz, something
ancak farklı bir türse yine de farklı şekilde tedavi edebiliyoruz. Bu durumda, bunu as
belirlemek için anahtar kelimeyi kullanmak istersiniz :
Not: as
Operatör, Swift'te cast türünü yazmanızdır.
// Conditionally
if let thing = something as? Int {
print(thing) // 0
}
// Optionally
let thing = something as? Int
print(thing) // Optional(0)
// Forcibly
let thing = something as! Int
print(thing) // 0, if no exception is raised
İki as
anahtar kelime arasındaki farka dikkat edin . Daha önce olduğu gibi, isteğe bağlı olarak paketini açtığımızda !
patlama operatörünü kullandık . Burada aynı şeyi yapacaksınız, ancak sadece isteğe bağlı olmayan bir döküm yapmak yerine, aynı zamanda döküm yapıyorsunuz Int
. Ve aksi takdirde, değer uygulamanız çöktüğünde patlama operatörünü kullanmak gibi mahzun olmalıdır .Int
nil
Ve bu değişkenleri bir çeşit veya matematiksel işlemde kullanmak için, bunun yapılabilmesi için paketlerinin açılması gerekir.
Örneğin, Swift'te yalnızca aynı türden geçerli sayıdaki veri türleri birbiriyle çalıştırılabilir. Eğer bir tür dökme zaman as!
sen sanki o değişkenin mahzun zorluyor belli o ameliyat ve uygulamanın çökmesine neden nedenle güvenli, o tiptedir. Değişken gerçekten döküm yaptığınız tipte olduğu sürece bu tamam, aksi takdirde ellerinizde bir karışıklık olacak.
Bununla birlikte döküm as!
, kodunuzun derlenmesine izin verecektir. Bir ile döküm yapmak as?
farklı bir hikaye. Aslında, hepinizi tamamen farklı bir veri türü olarak as?
ilan eder Int
.
Şimdi Optional(0)
Ve eğer ödevinizi yapmaya çalışırsanız,
1 + Optional(1) = 2
Matematik öğretmeniniz size muhtemelen bir "F" verecektir. Swift ile aynı. Swift dışında size not vermek yerine hiç derleme yapmaz. Çünkü günün sonunda isteğe bağlı aslında sıfır olabilir .
Önce Güvenlik Çocuklar.