as
yukarı döküm ve köprülü tipe tip döküm için kullanılır
as?
güvenli yayın için kullanılır, başarısız olursa sıfır döndürür
as!
döküm yapmaya zorlamak için kullanılır, başarısız olursa çökme
Not:
as!
ham türü isteğe bağlı hale getiremez
Örnekler:
let rawString: AnyObject = "I love swift"
let optionalString: AnyObject? = "we love swift"
let nilString: AnyObject? = (nil as String?)
let rawInt: AnyObject = Int(3)
let optionalInt: AnyObject? = Int(3)
let nilInt: AnyObject? = (nil as Int?)
Misal
var age: Int? = nil
var height: Int? = 180
Bir ? Ekleyerek Veri türünün hemen ardından derleyiciye değişkenin bir sayı içerip içermeyeceğini söylersiniz. Düzgün! İsteğe bağlı sabitleri tanımlamanın gerçekten mantıklı olmadığına dikkat edin - değerlerini yalnızca bir kez belirleyebilir ve bu nedenle değerlerinin sıfır olup olmayacağını söyleyebilirsiniz.
Ne zaman kullanmalıyız "?" ve ne zaman "!"
Diyelim ki UIKit tabanlı basit bir uygulamaya sahibiz. görünüm denetleyicimizde bazı kodlar var ve bunun üzerine yeni bir görünüm denetleyicisi sunmak istiyoruz. ve gezinme denetleyicisini kullanarak ekrandaki yeni görünümü aktarmaya karar vermemiz gerekiyor.
Bildiğimiz gibi, her ViewController örneğinin bir özellik gezinti denetleyicisi vardır. Gezinme denetleyicisi tabanlı bir uygulama oluşturuyorsanız, uygulamanızın ana görünüm denetleyicisinin bu özelliği otomatik olarak ayarlanır ve bunu, görünüm denetleyicilerini itmek veya açmak için kullanabilirsiniz. Tek bir uygulama projesi şablonu kullanıyorsanız - sizin için otomatik olarak oluşturulan bir gezinme denetleyicisi olmayacaktır, bu nedenle uygulamanızın varsayılan görünüm denetleyicisi, navigationController özelliğinde depolanan hiçbir şeye sahip olmayacaktır.
Eminim bunun bir İsteğe Bağlı veri türü için tam olarak bir durum olduğunu tahmin etmişsinizdir. UIViewController'ı işaretlerseniz, özelliğin şu şekilde tanımlandığını göreceksiniz:
var navigationController: UINavigationController? { get }
Öyleyse kullanım durumumuza geri dönelim. Görüntü denetleyicinizin her zaman bir gezinme denetleyicisine sahip olacağını biliyorsanız, devam edip onu açmaya zorlayabilirsiniz:
controller.navigationController!.pushViewController(myViewController, animated: true)
Ne zaman bir! özellik adının arkasında derleyiciye bu özelliğin isteğe bağlı olduğunu umursamadığımı söylüyorsunuz, bu kod çalıştırıldığında her zaman bir değer deposu olacağını biliyorum, bu nedenle bu İsteğe Bağlı normal bir veri türü gibi davranın. Güzel değil mi? Görünüm denetleyicinizde bir gezinme denetleyicisi yoksa ne olur? NavigationController'da her zaman bir değerin saklanacağını söylerseniz yanlış mıydı? Uygulamanız kilitlenecek. Bu kadar basit ve çirkin.
Öyleyse kullanın! sadece bunun güvenli olduğundan% 101 eminseniz.
Her zaman bir gezinme denetleyicisi olacağından emin değilseniz nasıl olur? O zaman kullanabilir misin? yerine !:
controller.navigationController?.pushViewController(myViewController, animated: true)
Nedir? özellik adının arkasında derleyiciye bu özelliğin nil mi yoksa bir değer mi içerdiğini bilmediğimi söyler , bu yüzden: eğer değeri varsa onu kullanın ve aksi takdirde tüm ifadeyi nil olarak düşünün. Etkili? bir gezinti denetleyicisi olması durumunda bu özelliği kullanmanıza izin verir. Herhangi bir türden kontrol veya herhangi bir tür döküm varsa hayır. Bu sözdizimi, bir gezinme denetleyicinizin olup olmadığı umrunda olmadığında ve yalnızca varsa bir şeyler yapmak istediğinizde mükemmeldir.
Fantageek'e çok teşekkürler