最近はGithubでお世話になっているライブラリのコードリーディングをしたりして、
どのように実装されているかとか、どういう書き方やジェネリクスの使い方してるか、とか学んでいます。
その中で、興味深いものを見つけたので、書き留めておきます。
class プロトコル…?
きっかけは、Geccoなどのライブラリで有名な、yukiasaiさんの、 Kageeというライブラリのコードリーディングをしている時に、以下のような記述を発見。
public protocol MockType: class {
....
}
こ れ は 一 体 …!
class って、
class SomeClass {
}
って使うだけじゃなくて、protocol
としても指定できるの…?継承させた場合ってどうなるの?
ということで、試してみた
検証してみる
こんな感じでコードを書いてみました。
protocol OnlyClassProtocol: class {
}
class A: OnlyClassProtocol {
}
struct B: OnlyClassProtocol { // error!
}
さて、これをPlayground等で実行すると…
struct B でエラーが出ました。
どうやら、protocol
として class を指定すると、 class でしかprotocol
を適応できなくなるみたいです。
ちなみにその逆で、 struct や enum といった指定はできないようです。
(追記)
どうやらこれは、Class Only Protocol と呼ばれているみたいです。