4

プロトコル拡張による美しいコードの可能性に魅了されています。しかし、クラス継承の本当の違いを把握していないようです。

クラス継承の代わりに構成を使用できるように、何かをモデル化するにはさまざまな方法があることを知っています。

しかし、クラス継承の機能を知ったのは、サブクラスがスーパークラスの実装を非常に簡単に使用できるということでした。プロトコル拡張機能を使用すると、値型に対してもこの機能を使用できます。

問題は、クラス継承にはどの機能があり、プロトコル拡張にはどの機能がないかということです。または、プロトコル拡張の代わりにクラス継承をいつ使用するか。

4

3 に答える 3

0

私が見つけた唯一の本当の利点は、サブクラスではないスーパークラス オブジェクトを作成できるため、サブクラスの実装の詳細を無視できることです。

A が B のスーパークラスである場合、A を作成でき、B から何も気にする必要はありません。

プロトコルでは、採用する構造体/クラスを常に使用する必要があります。

場合によっては、UIViewController ではなく UIResponder を作成する方が理にかなっていることがあります。これは、その機能が必要なく、機能の少ないクラスを使用する方が安全で簡単だからです。

プロトコルとその拡張のみの場合、1 つの実装を選択する必要があるため、同じコードを 2 回記述しないようにするには、対応するクラス階層の各階層レベルに 1 つずつ、複数のプロトコルが必要です。

P2 が P1 を採用し、P1E が P1 の拡張であり、P2E が P2 の拡張である場合、P2 を採用する構造体/クラスの能力の低いバージョンを取得するためだけに、P1 を採用する構造体/クラスを作成する必要があります。

于 2016-06-29T12:53:33.860 に答える