トップページ » プロトコル(protocol)と拡張(extension)
11 Jun 2014 10:51公開
プロトコルと拡張を紹介します。
プロトコル Protocol
protocolのキーダードでプロトコルを宣言します。
protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust() }
クラス、列挙型、および構造体すべては、プロトコルを利用することができます。
mutatingキーワードはクラスのプロパティーを変更できるように宣言します。ところで、クラス自身のメソッドはmutatingで宣言する必要がありません。全てのクラスメソッドはクラスのステータスを変更できます。
class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 69105 func adjust() { simpleDescription += " Now 100% adjusted." } } var a = SimpleClass() a.adjust() let aDescription = a.simpleDescription struct SimpleStructure: ExampleProtocol { var simpleDescription: String = "A simple structure" mutating func adjust() { simpleDescription += " (adjusted)" } } var b = SimpleStructure() b.adjust() let bDescription = b.simpleDescription
拡張 Extension
拡張 Extension は既存のソースコードにメソッド、プロパティーなど機能を追加できます。ライブラリとフレームワークからインポートしたクラスの機能も変更できます。
extension Int: ExampleProtocol { var simpleDescription: String { return "The number \(self)" } mutating func adjust() { self += 42 } } 7.simpleDescription
プロトコル名を他のタイプと同じように使えます。例えばコレクションに格納されるオブジェクトのタイプはそれぞれですが、全てのオブジェクトは同じプロトコルを実装していれば、大丈夫です。
ただし、プロトコルの外部に定義されたメソッドは、プロトコロでは利用できません。
let protocolValue: ExampleProtocol = a protocolValue.simpleDescription // protocolValue.anotherProperty // コメントを外せば、エラーの確認ができます。
シリーズ
記事のリスト
- プロトコル(protocol)と拡張(extension)
レーティング
コメント