*

Swiftの配列でエラー。’NSArray’ does not have a member named ‘append’

   

AL005_konnnahazujyanakatta20140830500
前回の記事を作るにあたり、実は最初はバリエーションを考えて、
以下の様な配列を作成していました。

var array1 = [1,"こんにちは","a",20.5]
        
println(array1[0]) //1
println(array1[1]) //こんにちは
println(array1[3]) //20.5

この配列、初期値を設定し、表示だけなら特に問題はなかったのですが、
配列の追加でエラー(’NSArray’ does not have a member named ‘append’)となってしまいました。

var array1 = [1,"こんにちは","a",20.5]

array1.append(200) //'NSArray' does not have a member named 'append' のエラー

他の記事などではこの書き方でエラーも発生していそうにないし、最新のバージョンで変わった可能性はあるものの、appendの書き方が変わったという情報は無い。

ちょっと悩みましたが、調べたら同じ事で悩んでいる人が既にいました。

How can I add a new Item to my multi-type Array in Swift

値の型が異なる配列にはAnyObject[]を定義する

結論としては、arrayの宣言時にAnyObject[]を明示的に記載すれば問題なく動きました。

var array1:AnyObject[] = [1,"こんにちは","a",20.5]

array1.append(200) 

println(array1[4]) //200

最初からAnyObject[]を宣言しておかないと、append時にうまく処理してくれないようですね。

ちなみに型定義を予めする場合は、[Int]のような形で[]の中に型を記述しますが、

[AnyObject]と書いたら、Xcodeがエラーをはきました。

原因はわかっていませんが、もしかしたらSwift1.0では改善されているかもしれません。

最後に

ちなみに、arrayで型の違う値を設定するのはあまりおすすめできません。

arrayの値を受け取る際にどの型の値がくるのかわからなくなってしまうので、その後の処理で考慮する事も増えますし、バグの温床になります。

極力、同じ型の値を設定するようにしましょう。

 - Swift