プロトコルとエクステンション (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()
※関連コンテンツ