プロトコル継承

Swiftにおける**プロトコル継承(Protocol Inheritance)**は、1つのプロトコルが他のプロトコルを継承し、それらの要件を引き継ぐ機能です。これは、クラスの継承とは異なり、**複数のプロトコルからの継承が可能(多重継承)**であり、柔軟なインターフェース設計を可能にします。


基本構文

swift
protocol A { func methodA() } protocol B { func methodB() } // CはAとBの両方を継承 protocol C: A, B { func methodC() }

この場合、protocol C を採用する型は、ABC すべてのメソッドを実装する必要があります。


実装例

swift
protocol Movable { func move() } protocol Rotatable { func rotate() } // 複数プロトコルの継承 protocol Transformable: Movable, Rotatable { func scale() } // 構造体でTransformableを準拠 struct Shape: Transformable { func move() { print("移動") } func rotate() { print("回転") } func scale() { print("拡大・縮小") } }

このようにして、共通の振る舞いを段階的に再利用・拡張することができます。


利点

  1. コードの再利用性向上
    小さなプロトコルを定義し、それらを組み合わせることで柔軟な設計が可能になります。

  2. モジュール化・責務分離
    各プロトコルが単一の責務を持ち、それらを組み合わせることで拡張性が高くなります。

  3. 多重継承が可能
    Swiftのクラスとは異なり、複数のプロトコルを同時に継承できます。


実用的な例(UIKit)

UIKitにおいても、以下のようにプロトコル継承が利用されています。

swift
protocol UITableViewDataSource: NSObjectProtocol { func tableView(_: UITableView, numberOfRowsInSection: Int) -> Int func tableView(_: UITableView, cellForRowAt: IndexPath) -> UITableViewCell }

UITableViewDataSource は、NSObjectProtocol を継承しており、クラスベースで使うことが想定されています。


注意点

  • 継承元プロトコルの変更は継承先にも影響を与えるため、慎重に設計する必要があります。

  • 型に準拠させる際は、継承されたすべての要件を満たす必要があります。


Swiftのプロトコル継承は、機能の分離と再利用を促進し、より保守性の高いコードを実現するための重要な設計手法です。

生成日:2025/05/04