前回は変数宣言についてまとめたので、今回はメソッドの宣言、実装、呼び出しについてまとめる。
メソッドの宣言
メソッドを宣言する際の書式は以下のようになる。以下はヘッダファイル(.h)に記述する。
- (戻り値の型) メソッド名 : (引数の型) 引数名;
宣言の頭にマイナス-を付けるとインスタンスメソッドを指す。逆はプラス+で、これはクラスメソッド(静的メソッド)を指す。
引数を複数指定する場合は以下のような書式になる。
- (戻り値の型) メソッド名 : (第1引数の型) 第1引数名 : (第2引数の型) 第2引数名;
ラベル名を指定すると、同一名のメソッドが複数存在する場合にメソッドの呼び分けを行うことができるようになる。Objective-Cには「オーバーロード」が存在しないので、同一名のメソッドを複数定義する際には、第二引数以降に名前を付ける必要がある。
- (戻り値の型) メソッド名 : (第1引数の型) 第1引数名 第2引数のラベル名: (第2引数の型) 第2引数名 第3引数のラベル名: (第3引数の型) 第3引数名;
記述例としては以下のようになる。以下はヘッダファイル(.h)に記述している。
@interface SampleClass: Object {
//変数の宣言
int val;
}
//メソッドの宣言
//インスタンスメソッドの場合は頭に"-"を付ける。
- (id)sample1 : (NSString*)file:(int)ch;
//クラスメソッドの場合は頭に"+"を付ける。
+ (id)sample2 : (NSString*)file:(int)ch;
//引数がNSStringなどの参照型の場合は引数の型宣言にアスタリスク(*)を付ける。
- (id)sample3 : (NSString*)file:(int)ch;
//引数がintなどのプリミティブ型の場合は引数の型宣言にアスタリスクは不要。
- (id)sample4 : (int)num;
//引数を複数受け取る場合はコロン(:)で区切る。
- (id)sample5 : (int)num:(int)loop;
//戻り値が無い場合はvoidと記述する。
- (void)sample6 : (int)foo;
//戻り値の記述を省くこともできる。この場合はvoidの扱いになる。
- sample7 : (int) v;
//プロトコルで型への適合をチェックすることもできる。
- (id)sample8 : (NSView <Moge> *) y;
@end
メソッドの実装
メソッドを実装する際の書式は以下のようになる。以下はメインファイル(.m)に記述する。
- (戻り値の型)メソッド名:(引数の型)引数名 {
//…何らかの実装
}
ちなみにObjective-Cでは戻り値を複数指定することはできないので、複数戻り値を指定したいときは配列で代用する。
メソッドの呼び出し
Objective-Cではメッセージ式というメソッドの呼び出し方法を使用してメソッドを呼び出す。今回はメッセージ式にはあまり深く踏み込まず、簡潔な呼び出し方法だけを説明する。
書式は以下のようになる。以下はメインファイル(.m)に記述する。
[クラス名 メソッド名];
記述例としては以下のようになる。
[myClass doMethod];
引数を付ける場合の書式は以下のようになる。
[クラス名 メソッド名:引数];
記述例としては以下のようになる。
[myClass doMethod:@"hoge1"];
コロン(:)で区切ることで引数をメソッドに渡すことができる。
以下のようにコロン(:)区切りで記述することで複数の引数をメソッドに渡すことができる。
[myClass doMethod:@"hoge1":@"hoge2"];
参考
visible true: Java脳でもわかるObjective-C入門
こたつつきみかん なぜ Objective-C は気持ち悪いのか 見た目編
iPhoneアプリケーション開発: Objective-Cのメソッドについて