nedeni Swift, Array
belirli türdeki değerleri tutan bir jenerik konteyner olmasıdır. Böylece tamsayıları tutan Array<Int>
veya dizeleri tutan Array<String>
olabilir. Ancak sadece bir Array
'a sahip olamazsınız. Dizinin içerdiği şeyin türü, genel parametre ve Swift, bu türün ne olması gerektiğini anlayamadığı için şikayet ediyor. Bazen, bu türün etrafındaki kod bağlamından çıkarılabilir, ancak her zaman değil, bu durumda olduğu gibi.
Sen depoladığınız şey türünü vererek sorunu çözebilirsiniz: Array<Int>
yazma yerine
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array<Int> {
self.showDataLabel.text = toString(testCompositeArray)
}
}
, sen de sorunu çözebilir, [Int]
kısa formu yazabilirsiniz bulduğunuz gibi NSArray
kullanarak. Array
'dan farklı olarak, NSArray
, Swift'e farklı bir yaklaşımı olan Objective-C'den kaynaklandığı için jenerikler kullanmaz. Bunun yerine, NSArray
yalnızca bir tür şey içerir, AnyObject
. Bu, herhangi bir sınıfın örneklerine işaret eden bir referanstır. Bununla birlikte, NSArray
ve AnyObject
'u kullanmanın büyük bir dezavantajı vardır; bu, içerdikleri bir değeri her kullandığınızda, değeri tamsayıya bir tamsayı veya bir dize gibi gerçek bir değere "dökmeniz" gerekir. Bu bir acı olabilir ve daha da kötüsü, bazen başka bir şeyiniz olduğunda bir tür şeyiniz olduğunu varsaydığınızda hatalara neden olabilir. Swift, genellikle bu tür hataları önlemek için türler hakkında daha spesifik olmanızı önerir.
Büyük cevap, Generics kavramını kavradım ... Son olarak! – DogCoffee