Help us understand the problem. What is going on with this article?

swift4で"子クラスに"プロトコルを準拠させる方法

特定のクラスにプロトコルを準拠させるのではなく、その子クラスにプロトコルを準拠させたいことがあったのでメモまでに!

コード例

例えば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: 親クラスという形で子クラスにのみ対応させたい内容を追加していけばいいんですね🙌
よければ使ってみてください!
他にもいい方法があればコメントお待ちしてます〜〜

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away