特定のクラスにプロトコルを準拠させるのではなく、その子クラスに
プロトコルを準拠させたいことがあったのでメモまでに!
コード例
例えばUITableViewCellクラスを継承する独自cellのクラスに、identifier
というstaticプロパティを持たせたいとします。
// 対象の独自cellクラス(子クラス)
class ShopListViewCell: UITableViewCell {}
// Protocolを用意
protocol IdentifiedCell {}
// まずUITableViewCell(親クラス)を準拠させる
extension UITableViewCell: IdentifiedCell {}
// 子クラスに準拠させたいProtocol内容を記述
extension IdentifiedCell where Self: UITableViewCell {
// `Self`が使えるのがいいですね!
static var identifier: String {
return String(describing: Self.self) // => "ShopListViewCell" など子クラスの名前取得できる
}
}
※Protocolエクステンションであるため、ストアドプロパティを定義できないのは仕方ないですね😅
まとめ
簡単にいうと、親クラスに準拠させたプロトコルに、extensionでwhere Self: 親クラス
という形で子クラスにのみ対応させたい内容を追加していけばいいんですね🙌
よければ使ってみてください!
他にもいい方法があればコメントお待ちしてます〜〜