プロトコルとエクステンション (3/4)
作成:2014-11-08 11:09
更新:2014-11-08 11:09
更新:2014-11-08 11:09
■エクステンション(Extension)とは?
プロトコルは、クラスにメソッドの実装を義務付けるものでしたが、エクステンション(Extension)は、クラスに直接メソッドを付け加えてしまう機能です。これは使い方も非常に簡単で、こんな具合に記述します。
「クラス名」には、機能を追加するクラス名を指定します。実に簡単ですね。
追加できるのはメソッドだけでなく、プロパティもOKです。ただしプロパティの場合は、「Computedプロパティ」のみが追加可能です。メソッドのようにget/setの処理を用意するタイプのプロパティのことでしたね。
このエクステンションは、自作のクラスだけでなく、Swiftのシステムライブラリとして用意されているクラスや、iOSのフレームワークのクラスなどもそのまま拡張してしまうことができます。
例として、Intクラスを拡張して、1からその数字までの合計を得るメソッドgetTotalを追加してみましょう。下にそのリストを掲載しておきます。
ここでは、extension IntというようにしてIntクラスを拡張しています。こうすることで、Int型の値全てにgetTotalメソッドが追加されるようになります。var num = 1234というように普通に作成したInt変数もgetTotalが使えるようになっていることがわかるでしょう。あるいは、例えば「100までの合計を調べたい」というときにも、ただ「100.getTotal()」と実行するだけです。
IntやStringといった、Swiftのもっとも基本的なものについても、このようにエクステンションで簡単に機能を追加することができるのです。
extention クラス名 {
……追加内容……
}
「クラス名」には、機能を追加するクラス名を指定します。実に簡単ですね。
追加できるのはメソッドだけでなく、プロパティもOKです。ただしプロパティの場合は、「Computedプロパティ」のみが追加可能です。メソッドのようにget/setの処理を用意するタイプのプロパティのことでしたね。
このエクステンションは、自作のクラスだけでなく、Swiftのシステムライブラリとして用意されているクラスや、iOSのフレームワークのクラスなどもそのまま拡張してしまうことができます。
例として、Intクラスを拡張して、1からその数字までの合計を得るメソッドgetTotalを追加してみましょう。下にそのリストを掲載しておきます。
ここでは、extension IntというようにしてIntクラスを拡張しています。こうすることで、Int型の値全てにgetTotalメソッドが追加されるようになります。var num = 1234というように普通に作成したInt変数もgetTotalが使えるようになっていることがわかるでしょう。あるいは、例えば「100までの合計を調べたい」というときにも、ただ「100.getTotal()」と実行するだけです。
IntやStringといった、Swiftのもっとも基本的なものについても、このようにエクステンションで簡単に機能を追加することができるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
extension Int { func getTotal()->Int { var total:Int = 0 for i in 1...self { total += i } return total } } var num = 1234 println(num.getTotal())
※関連コンテンツ