1. ホーム
  2. objective-c

[解決済み] Objective-Cのメソッド構文

2022-04-21 20:07:27

質問

このメソッド宣言の構文について、どなたか説明してください。 この関数では、UIPickerView(iPhone上のスロットマシンUI)の行数を返しています。 私の理解では、メソッドは、' pickerView で、NSInteger を返します。

というUIPickerviewへのポインタを渡しています。 pickerView ' ...まず、なぜメソッドがパラメータと同じ名前で呼ばれるのでしょうか?

次に component という NSInteger パラメータがあり、これはどのコンポーネントの行数を数えるのかを示しています。 これを決定するロジックは、メソッドのボディにあります。

とは何ですか? numberOfRowsInComponent ? 返している値を記述しているようですが、パラメータの途中にあるのです。

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component
{
    if (component == kStateComponent)
        return [self.states count];

    return[self.zips count];
}

解決方法は?

Objective-Cのメソッドは自己文書化するように設計されており、Smalltalkの豊かな伝統から借りています。

ここにあるものを説明してみます。 -(NSInteger) pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component .

  • - (NSInteger)

    この最初の部分は、これがObjective Cであることを示しています。 インスタンス メソッドで、NSInteger オブジェクトを返します。 - (ダッシュ)は、これが インスタンス メソッドで、ここで + であることを示します。 クラス メソッドを使用します。 括弧内の最初の値は、メソッドの戻り値の型です。

  • pickerView:

    この部分は メッセージ名 . その フルメッセージ名 この場合 pickerView:numberOfRowsInComponent: . Objective-Cのランタイムはこのメソッド情報を受け取り、指定されたレシーバに送信します。 純粋なC言語では、これは次のようになります。

    NSInteger pickerView(UIPickerView* pickerView, NSInteger component) . しかし、これはObjective-Cなので、メッセージの名前に追加情報が詰め込まれています。

  • (UIPickerView*)pickerView

    この部分は 入力 . ここでの入力は、タイプ UIPickerView* で、pickerViewというローカル変数名を持っています。

  • numberOfRowsInComponent:

    この部分は、第2部の メッセージ名 . ここでわかるように、メッセージ名は受信者に渡す情報を示しやすくするために分割されます。 したがって、オブジェクトmyObjectに変数fooとbarをメッセージする場合、次のように入力します。

    [myObject pickerView:foo numberOfRowsInComponent:bar];

    をC++スタイルとは対照的なものにしました。

    myObject.pickerView(foo, bar); .

  • (NSInteger)component

    の最後の部分です。 入力 ここでの入力は、タイプ NSInteger で、ローカル変数名 component を持つ。