Swiftで遊ぼう! on Hatena

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

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(型)ということが納得できました!

今日はここまで。