web-dev-qa-db-ja.com

Objective Cのメソッド構文

誰かがこのメソッド宣言の構文を説明してくれますか?この関数では、UIPickerView(iPhoneのスロットマシンUI)の行数が返されます。私の理解では、このメソッドは「pickerView」と呼ばれ、NSIntegerを返します。

'pickerView'と呼ばれるUIPickerviewへのポインターを渡します...最初に、なぜメソッドはパラメーターと同じ名前で呼び出されるのですか?

次に、コンポーネントと呼ばれるNSIntegerパラメーターがあり、行をカウントするコンポーネントを示します。メソッドの本体にあるものを決定するロジック。

'numberOfRowsInComponentとは何ですか?返される値を説明しているように見えますが、パラメータの中央にあります。

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

    return[self.zips count];
}
176
Craig

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

-(NSInteger) pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)componentについて、ここで説明します。

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

  • pickerView:
    この部分はメッセージ名の一部です。 完全なメッセージ名は、この場合はpickerView:numberOfRowsInComponent:です。 Objective-Cランタイムは、このメソッド情報を取得し、指定された受信者に送信します。純粋なCでは、これは次のようになります
    NSInteger pickerView(UIPickerView* pickerView, NSInteger component)。ただし、これはObjective-Cであるため、追加情報がメッセージ名にパックされます。

  • (UIPickerView*)pickerView
    この部分はinputの一部です。ここでの入力はUIPickerView*タイプであり、ローカル変数名はpickerViewです。

  • numberOfRowsInComponent:
    この部分は、メッセージ名の2番目の部分です。ここでわかるように、メッセージ名は分割されて、受信者に渡す情報を示します。したがって、変数fooとbarを使用してオブジェクトmyObjectにメッセージを送信する場合、次のように入力します。
    [myObject pickerView:foo numberOfRowsInComponent:bar];
    C++スタイルとは対照的に:
    myObject.pickerView(foo, bar);

  • (NSInteger)component
    これは、入力の最後の部分です。ここでの入力はNSInteger型であり、コンポーネントのローカル変数名を持ちます。

356
locriani

Objective-Cでは、メソッドの名前は、引数および型ではない宣言のすべての部分で構成されます。したがって、このメソッドの名前は次のようになります。

pickerView:numberOfRowsInComponent:

このメソッドは、次のようなCスタイルの関数と同等です。

編集: ( Jarret Hardie のおかげで):

NSInteger pickerViewNumberOfRowsInComponent(UIPickerView * pickerView, NSInteger component)
52
e.James

前の回答に加えて、Objective-Cメソッド(または必要に応じてメッセージ)にexternalおよびinternalパラメーター名があることを伝えたいと思います。

したがって、この場合:

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component

numberOfRowsInComponentexternalの名前で、このメソッドを外部から呼び出すときに使用する名前です。

componentは、パラメータの内部の名前です。メソッドの内部からパラメータを参照するために使用する名前です。

それが少しクリアされることを願っています。

28
Karolis

Objective-Cのメソッドシグネチャは、文章に似ているように思えます。各パラメーターは、メソッド名の一部に値します。たとえば、Cでは、人に関する情報を設定するメソッド(setPersonData)を使用できます。

void setPersonData( char* name, int age, float height ) {

そしてObjective-Cでは、メソッドはより記述的です(setPersonName:andAge:andHeight:

- (void) setPersonName: (char *)name andAge:(int)age andHeight:(float)height {
21
wilczarz