§1 Xcodeでクラスを定義してみる
前回ではmain.mにクラスの宣言部分、クラスの実装部分を全て記述していましたが、実際にはクラスファイルとヘッダファイルを用意することがほとんどです。Xcodeでクラスを定義するには以下のようにします。
[ファイル]⇒[New]⇒[File]からプロジェクトを作成します。テンプレートは[Objective-C class]を選択します。
[Class]にクラス名を入力、[Subclass of]は[NSObject]を選択します。保存場所はプロジェクトのフォルダでOKです。[Group]はプロジェクト内のフォルダです、デフォルトのプロジェクトフォルダでOKです。[Target]にはプロジェクト名が表示されていると思います。ここはチェックを入れておきます。(プログラムのビルドと実行に関係する設定)
これでクラスファイル(クラス名.m)とヘッダファイル(クラス名.h)が生成されます。
ヘッダファイルにはクラスの宣言部分を記述します。クラスファイルにはクラスの実装部分を記述します。
この2つのファイル生成と同時にヘッダファイルには「@interface クラス名 : NSObject・・・@end」、クラスファイルには「@implementation クラス名・・・@end」が自動的に記述されています。
ヘッダー先頭にある「#import」により「Foundation」というフレームワークの機能を取りこんでいます。「Foundation」は、Objective-Cの基本機能のかたまりみたいなもので、必ずこれをimportすると考えておいてOKです。C言語の「stdio.h」みたいなカンジです。
前回と同じ機能をもつクラスをこの2つのファイルに記述すると以下のようになります。
ヘッダファイル(TestClass.h)
1 2 3 4 5 6 7 8 9 10 |
#import <Foundation/Foundation.h> //クラス宣言部 @interface TestClass : NSObject{ NSString *myString; } - (void)setMyString :(NSString*)inputString; - (void)printString; @end |
クラスファイル(TestClass.m)
1 2 3 4 5 6 7 8 9 10 11 12 |
#import "TestClass.h" //クラス実装部 @implementation TestClass - (void)setMyString :(NSString*)inputString { myString = inputString; } - (void)printString { printf("myString is %s ", [myString UTF8String]); } @end |
メインファイル(main.m)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#import <Foundation/Foundation.h> #import "TestClass.h" int main(int argc, constchar *argv[]) { @autoreleasepool { // insert code here... id testClassObj; testClassObj = [[TestClass alloc] init]; [testClassObj setMyString:@"ABCDEFG"]; [testClassObj printString]; } return 0; } |
実行(左上のRunボタンをクリック)すると画面下部に実行結果「myString is ABCDEFG」が表示されます。
●インスタンス変数の定義
@interface以下の{ }内に記述します。
●メソッドの定義
@interface部に宣言を記述し、
@implementation部に処理を記述します。
【引数が1つのメソッドの記述方法】
-(返り値の型)メソッド名:(引数1の型)引数1
【引数が2つ以上あるメソッドの記述方法】
-(返り値の型)メソッド名:(引数1の型)引数1 ラベル:(引数2の型)引数2; ラベル:(引数3の型)引数3・・・;
途中までは引数が1つのメソッドと変わりませんが、2つ目の引数からラベルというものを記述します。ラベルは後に続く引数を説明するためのキーワードです。メソッドの名称はラベル名も含めて「メソッド名:ラベル名 ラベル名 ラベル名・・」とするのが正しい名称となります。ちなみにメソッド名と引数の数や型が全く同じメソッドを定義した場合、ラベル名に違う名前を付ければオーバーロード関数を作ることができます。
メソッドの呼び出し方は、[インスタンス メソッド名:引数1 ラベル:引数2 ラベル:引数3・・・];となります。ラベルを省略することはできません。
Objective-C 基礎 目次
以下の記事も参考にして頂ければと思います。
「Objective-C 基礎(1)- Xcodeのインストールとプロジェクトの作成」
「Objective-C 基礎(2)- Objective-Cの概要とメソッドの呼び出し」
「Objective-C 基礎(3)- クラス定義の方法」
「Objective-C 基礎(4)- クラスの使い方」
「Objective-C 基礎(5)- クラスメソッドとインスタンスメソッド」
「Objective-C 基礎(6)- 変数のスコープとプロパティ」
「Objective-C 基礎(7)- 変数のデータ型」
「Objective-C 基礎(8)- 文字列とNSStringクラス」
「Objective-C 基礎(9)- 可変文字列とNSMutableStringクラス」
「Objective-C 基礎(10)- Objective-Cの配列」
「Objective-C 基礎(11)- Objective-Cの連想配列」
「Objective-C 基礎(12)- ループ処理」
「Objective-C 基礎(13)- プロトコル」