Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 241 - AnyObjectを整理していく

Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide

AnyObjectの勉強をしていると、Swiftのアレー型はObjective-CのNSArrrayと取り扱い方が異なるため、その互換性をスムーズにさせるためにTyoe Castingが重要で、その中核をなすのがAnyObjectのような気がしてきた。

Swift言語そのものはかなりタイプセーフな作りになってるけど、iOSはいままでの開発歴史からみれば型にルーズな発展を遂げている。そのため、iOS APIのオブジェクトにSwiftポインターを持つ場合、オブジェクトのクラスを知る必要はあるし、可能なら特定のクラスにキャストしなければならない状況がかなりあるだろう。Swiftは安全な方法をいくつか用意していて、Type Castingはその1つになるだろう。

ポール先生のAnyObjectの説明をもう少し注意深く聴いてみる。

先ず、AnyObjectは、ある種特別な「Type(型)」になる。そしてこれはプロトコールであり、それ自身がデータストラクチャを持つ使い方はしない。たぶんベテランのプログラマーには理解できていることでしょう。しかし、素人の私には理解しがたい説明だった。AnyObjectの主要な目的は、Objective-C APIとの互換性ということを再認識しておく必要がある。

アレーを考えていた時にパラダイムシフトは生じた。

Swiftのアレーは「同型(Type)」のアイテムしか保持できない。しかし、NSArrayは異なる型のアイテムを保持できるので、この両者の互換性を持たせるために考え出された方法がAnyObjectなんだ。

クラスに限られるけど、

var array = [AnyObject]()

このようなアレーを宣言したら、どんなクラスでも保持できることになるんですよね。

なんとも素晴らしい。

今日はここまで。