プロトコルとエクステンション (4/4)
作成:2014-11-08 11:12
更新:2014-11-08 11:12
更新:2014-11-08 11:12
■プロトコルとエクステンションを組み合わせる
このプロトコルとエクステンションを組み合わせると、ちょっと面白いことができます。
エクステンションは、メソッドやプロパティだけでなく、「プロトコルを追加する」ということもできるのです。これにより、既にある複数のクラスに共通した機能を実装し、まとめて処理できるようになります。
これも、実際の利用例を見てみましょう。下のリスト欄では、MyDataPrintableというプロトコルを作成し、そこにprintDataメソッドを用意してあります。そして、エクステンションを使い、このようにStringやIntにMyDataPrintableプロトコルを追加しています。
こうすることで、すべてのString値やInt値がMyDataPrintableとして扱えるようになります。つまり、StringとIntを同じプロトコルのクラスとして、まったく同じようにまとめて処理できるようになるわけです。
このように、エクステンションとプロトコルは、単に自分のクラスを強化するだけでなく、Swiftに用意されているあらゆるクラスに独自の拡張を行い、自分なりにカスタマイズすることを可能にします。なかなか強力な機能なので、ぜひ覚えておきましょう。
エクステンションは、メソッドやプロパティだけでなく、「プロトコルを追加する」ということもできるのです。これにより、既にある複数のクラスに共通した機能を実装し、まとめて処理できるようになります。
これも、実際の利用例を見てみましょう。下のリスト欄では、MyDataPrintableというプロトコルを作成し、そこにprintDataメソッドを用意してあります。そして、エクステンションを使い、このようにStringやIntにMyDataPrintableプロトコルを追加しています。
extension String: MyDataPrintable {……}
extension Int: MyDataPrintable {……}
こうすることで、すべてのString値やInt値がMyDataPrintableとして扱えるようになります。つまり、StringとIntを同じプロトコルのクラスとして、まったく同じようにまとめて処理できるようになるわけです。
このように、エクステンションとプロトコルは、単に自分のクラスを強化するだけでなく、Swiftに用意されているあらゆるクラスに独自の拡張を行い、自分なりにカスタマイズすることを可能にします。なかなか強力な機能なので、ぜひ覚えておきましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
protocol MyDataPrintable { func printData () } extension String: MyDataPrintable { func printData() { println("文字列:\(self).") } } extension Int: MyDataPrintable { func printData() { println("整数:\(self).") } } var str = "Hello" var num = 12345 str.printData() num.printData()
※関連コンテンツ