わかった!わかった!クラスがわかった!(Objective-C Class)

みなさまこんにちは

Objective-Cでのクラスの理解がなかなかできないまま、ぐだぐだ勉強してたけどやっとわかってきた。
とゆーわけで前にアラートダイアログを出す実験をしたんだけども、今回はアラートを出す部分をクラス化してみてみた。(じつはあんまり意味無し)
プログラム本体(AppDelegateクラス)からアラートしたい文字列をアラートクラスに送信して表示させる的なものです。
ウィンドウのテキストフィールドに打ち込んだ文字をボタンをクリックすることによってテキストフィールドに打った文字がアラートメッセージとして表示されるようにしたいです。

クラスを作るときは基本的には
クラス名.h(宣言部)
クラス名.m(実装部)
の2種類のファイルが必要でXcodeからクラスファイルを新規作成した場合だいたいセットで作られます。
今回はアラートクラスにアラートを表示する部分をメソッド化します。
メソッドは、、、、とりあえずは命令だと思ってください。(ちょっと違うけどJavaScriptでは関数てきなーーー)
なのでAppDelegateからアラートクラスのメソッドAlertを実行する感じです。
えと、、、勉強しながらなので表現がおかしい場合もあるとおもいますが、、ご了承ください。(確実にまちがっていそう。。)

まずはウィンドウにプッシュボタンとテキストフィールドを配置

ひもづけるとAppDelegate.hはこうなります。
《AppDelegate.h》

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject
	@property (assign) IBOutlet NSWindow *window;
	@property (assign) IBOutlet NSTextField *TextField;
	- (IBAction)PushButton:(id)sender;
@end

AppDelegate.hはこれ以上なにもしないでオッケー。

そしてアラートクラスをXcodeの新規作成から作りましょう。
ここでは名前はAlertClassにしています。
まずは宣言部

@interfaceと@endの間にメソッドの宣言をしましょう。
宣言の文法は
– (メソッドの戻り値の型)メソッド名:(引数の型)引数の名前;
なので
今回は戻り値はいらないので、戻り値がいらない場合はメソッドの戻り値の型はvoidにしておきます。
引数はメッセージの内容をメソッドに渡したいため、文字列型(NSString *)にして名前をAlertMsgにしておきます。

– (void)Alert:(NSString *)AlertMsg;

この一行を@interfaceと@endの間(インターフェイス部)に挿入すると次のようになります。


 

《AlertClass.h》

#import <Foundation/Foundation.h>

@interface AlertClass : NSObject
	- (IBAction)PushButton:(id)sender;- (void)Alert:(NSString *)AlertMsg;
@end

 

つぎは実装部
こちらは@implementation〜@endの間に
メソッドの実行内容を挿入します。
先ほどの宣言部と同じ書式の下の{ }内に実行内容を書きます。

– (void)Alert:(NSString *)AlertMsg;
{
//ここにメソッドの実行内容を入れる
}

アラートダイアログは前に紹介したものとほぼ同じなので説明はしないっす。
一行だけ注目してほしい文が
informativeTextWithFormat:AlertMsg
部分で、引数として渡されたメッセージ(AlertMsg)をここでアラートダイアログにわたしています。


 

《AlertClass.m》

#import “AlertClass.h”

@implementation AlertClass
– (void)Alert:(NSString *)AlertMsg
{
NSAlert *AlertDialog =[NSAlert
alertWithMessageText:@”アラート!!”
defaultButton:@”OK”
alternateButton:0
otherButton:0
informativeTextWithFormat:AlertMsg
];

[AlertDialog runModal];
}

@end


 

最後に本体部分の実装部
まずAlertClassを使用するために
#import “AlertClass.h”
の一行をいれてます。これによってAppDelegateにAlertClassが組み込まれ
メソッド、変数などが使用できるようになります。

そしてまずクラスをインスタンス化する。。(これひじょーにわかりにくい。。)
ようはクラスという設計図から実体化する。
実体化しないと能力は使えない!!
魔法生物を作るレシピ(クラス)を元に産み出した(インスタンス化)魔法生物に能力(メソッド)を使わせる。産み出した魔法生物のHP、MPの値はインスタンス変数、、、(おかしくなってきた。。。)
というわけで下の一行を使ってクラスを実体化させないといけないわけ。
AlertClass *myClass = [[AlertClass alloc]init];

ちなみにmyClassってのが実体化したクラスにつける名前(任意)
[[AlertClass alloc]init];
はほぼ決まりごとと思っていいらしいです。
allocはメモリに実体化したクラスを割り当てる。
initが実体化したクラスを初期化する。
という役割みたいです。
最後に実際にアラートクラスを呼び出している命令
メソッド呼び出しの文法は

[クラス名 メソッド名:引数];
引数にはテキストフィールドの文字列「self.TextField.stringValue」を渡したいので
[myClass Alert:self.TextField.stringValue];
というふうになります。


 

《AppDelegate.m》

#import “AlertClass.h”
#import “AppDelegate.h”

@implementation AppDelegate
@synthesize TextField = _TextField;

@synthesize window = _window;

– (IBAction)PushButton:(id)sender {
AlertClass *myClass = [[AlertClass alloc]init];
[myClass Alert:self.TextField.stringValue];
}
@end


 

これをビルドして実行!!

テキストフィールドにアラートダイアログに出したい文章を入力。
ぼたんくりっく!!

おーーーけーーーばっちり

それではまた