元のエラーを受け取った理由は、Swift ではArray
、特定の型の値を保持する汎用コンテナーであるためです。したがって、Array<Int>
整数を保持する やArray<String>
文字列を保持する を使用できます。しかし、あなただけを持つことはできませんArray
。配列に含まれるものの型はジェネリック パラメータであり、Swift はその型がどうあるべきかを判断できないため、不平を言っています。周囲のコードのコンテキストからその型を推測できる場合もありますが、この場合のように常にそうとは限りません。
保存するもののタイプを指定することで、問題を解決できます。
IBAction func loadData(sender: AnyObject) {
if let testCompositeArray = defaults.objectForKey("testScoreSATArray") as? Array<Int> {
self.showDataLabel.text = toString(testCompositeArray)
}
}
を書く代わりにArray<Int>
、短い形式を書くことができます。[Int]
を使用して問題を解決することもできNSArray
ます。とは異なりArray
、NSArray
Swift とは異なるアプローチを持つ Objective-C に由来するため、ジェネリックを使用しません。代わりに、NSArray
は 1 種類のみを保持しAnyObject
ます。これは、任意のクラスのインスタンスを指すことができる参照です。
NSArray
ただし、 andの使用には大きな欠点がありAnyObject
ます。それは、それらに含まれる値を使用するたびに、値を整数や文字列などの実際のものに「キャスト」する必要があることです。これは苦痛であり、さらに悪いことに、実際には別の種類のものを持っているのに、ある種類のものを持っていると仮定すると、エラーが発生することがあります. Swift は通常、このようなエラーを回避するために型についてより具体的にすることをお勧めします。