Swiftで遊ぼう! - 245 - AnyObjectからProtocolの復習
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
正本The Swift Programming Language本で、AnyObjectの説明がProtocolのところにあったんで、ちょっとProtocolの考え方を復習。
今までプロトコールは、ベースが異なるクラスでも同様のプロパティ(Protocol)を持たせ同様に扱えるようにするポリモーフィズムを実装させる方法という風にぼんやりと理解していた。
しかし、最も重要な概念を理解していなかったんでですよね。
AnyObjectがType(型)というようにProtocolもType(型)なんですね!
もう一度Protocolの例文を使って実証してみる。
プロトコールを用意する。
@objc protocol HasArea { var area: Double { get } }
異なる2つのクラス、CircleクラスとCountryクラスにHasAreaプロトコールを実装させる。
class Circle: HasArea { let pi = 3.1415927 var radius: Double var area: Double { return pi * radius * radius } init(radius: Double) { self.radius = redius } }
class Country: HasArea { var area: Double init(area: Double) { self.area = area } }
それからそれぞれのクラスのインスタンスを作る。
var smallCircle = Circle(radius: 1) var japan = Country(area: 377_900)
そしてプロトコールがType(型)なのでHasAreaでアレーを宣言してそれぞれのインスタンスを保持させてみる。
var protocolObjects:[HasArea] = [ smallCircle, japan ]
おお、ちゃんと値を保持しましたね。これでProtocolはType(型)ということが納得できました!
今日はここまで。