Swift'in güçlü bir tip tahmini mekanizması vardır — bu, derleyicinin programcı tarafından açıkça belirtilmeden bir değerin tipini otomatik olarak belirlemesine olanak tanır. Tip tahmini kodu kolaylaştırır ve "gürültüsünü" azaltır. Örneğin:
let number = 42 // Int olarak tahmin edildi let name = "John" // String olarak tahmin edildi let items = [1, 2, 3] // [Int] olarak tahmin edildi
Ancak, bazı nüansları unutmamak önemlidir:
let emptyArray = []ifadesiyle bir değişken tanımlarsak, hangi türü alır?
Çoğu kişi emptyArray'nin "herhangi bir şeyin" dizisi veya [Any] olacağını yanıtlar. Gerçekte, Swift derleyicisi tipi çıkaramaz ve bir hata verir:
let emptyArray = [] // Hata: boş koleksiyon literali açık bir tipe ihtiyaç duyar
Boş bir dizi kullanmak için tipi açıkça belirtmek gerekir:
let emptyArray: [Int] = []
Hikaye
Ekip, let params = [:] olarak boş bir sözlük ekledi ve tipin [String: Any] olacağını bekliyordu, ancak derleyici tipi çıkaramadığı için derleme başarısız oldu. Sonuç — type inference'ın özelliklerinden kaynaklanan sebebi araştırmaya harcanan zaman.
Hikaye
Proje, let value = decode(json) olarak tanımlanan bir fonksiyonun çıkış tipini kullanıyordu. Geliştirici [String: Any] bekliyordu, ancak belirsizlik nedeniyle parser Any döndürdü ve bu durum runtime'da tipi dönüştürmeye çalışırken uygulamanın çökmesine neden oldu.
Hikaye
Açık bir tip belirtmeden farklı tipteki değerleri bir diziye eklemeye çalıştılar — let items = [1, "two", 3.0]. Swift tipi [Any] olarak çıkardı, fakat bu sonraki işlemler için bir tipte elemanlar beklenen bir dizide mantık hatalarına neden oldu.