2016-06-30 6 views
0

委任は私の新しいコンセプトです。私の理解では、それは他の誰かが私のために仕事をするよう求めています。私は彼にいくつかの仕事を委任します。デリゲートアップを含むコードがあります。私はそれを正しく理解することを願っています。

class Vehicle { 
    var numberOfWheels = 0 
    var description: String { 
     return "\(numberOfWheels) wheel(s)" 
    } 
} 

class Bicycle: Vehicle { 
    override init() { 
     super.init() //# Delegate up 
     numberOfWheels = 2 
    } 
} 

コードsuper.init()は、クラスの初期化中デリゲートアップアクションです。サブクラス初期化子は、まずスーパークラスの初期化子を呼び出します。スーパークラスのデフォルト初期化子。0を変数numberOfWheelsに割り当てます。これはフェーズ1の初期化です。その後、サブクラスの初期化子のオーバーライドアクションは、変数をnumberOfWheels = 2でさらにカスタマイズします。

質問私の理解が間違っていますか?と私はの委任を願っての説明私はここで使用されている正しいです。

ここに記載されているエラーや誤解を修正してください。ありがとう

+1

http://www.apeth.com/swiftBook/ch04.html#_subclass_initializers – matt

答えて

1

あなたがここで描写していることは、委譲パターンとまったく関係がありません。それは継承の概念です。あなたの自転車クラスはVehicleから継承しています。ビークルはすでにいくつかのコードを実装しているので、再度書き込むのではなく、スーパークラス(継承したクラス)のコードを使用することができます。あなたのスーパークラスには定義された初期化子がないので、super.init()は何もしません。 inheritanceについて読んで、この概念をよりよく理解してください。

委任の仕組みは次のとおりです。委任という考えは正しいですか。それはあなたが別のクラスにいくつかの仕事を "アウトソース"することができます。これはプロトコルで実現できます。デリゲートは、デリゲートプロトコルに準拠して、呼び出したいメソッドがあることを確認する必要があります。特定のメソッドの実装について気にしないので、ここで継承されたクラスの代わりにプロトコルを使用しています。単に代理人に状況を処理させたいだけです。代理人は何をすべきかを知っておく必要があります。

委任は、macOSとiOSのMVCアプリケーションで最も一般的に使用されます。委任について詳しくは、Apple Documentationをご覧ください。委任が実際にどのように機能するかを示すチュートリアルのチュートリアルlike this oneも数多くあります。

+0

ご協力ありがとうございます ") – SLN

関連する問題