#import "MySecondClass.h"
@implementation MySecondClass
@synthesize myFloat;
- (id)initWithFloat:(float)f String:(NSString *)str{
// 継承元の関数を呼ぶ時は[super *]を使う
self = [super init];
if(self){
// プロパティの初期化をする
self.myFloat = f;
// MyFirstClassを継承しているので,myStringプロパティが使える
self.myString = str;
}
return self;
}
@end
@implementation MySecondClass
@synthesize myFloat;
- (id)initWithFloat:(float)f String:(NSString *)str{
// 継承元の関数を呼ぶ時は[super *]を使う
self = [super init];
if(self){
// プロパティの初期化をする
self.myFloat = f;
// MyFirstClassを継承しているので,myStringプロパティが使える
self.myString = str;
}
return self;
}
@end
プロパティを使う準備のための「@synthesize」をします.
その下に関数が書かれています.
- (id)initWithFloat:(float)f String:(NSString *)str{
ここでObjective-Cの関数の定義の仕方について説明します.まずはじめの「-」はインスタンスメソッドを表します.
前回までのエントリで
「["インスタンス" ~]」
「["クラス" ~]」
の2種類の呼び出し方があったのを覚えていますか??
例えば,
[myClass setInt:3];
[UIColor redColor];
等が挙げられます.
このうち,「-」で始まる関数は「インスタンスメソッド」と呼び,
インスタンスが呼び出すメソッド(関数)になります.
上記の例だと,上のほうです.
次に,「(id)」は返り値を表します.何も返さない場合は
「(void)」
と書きます.
更に,「initWithFloat」は関数の名前を表します.
最後に,「:(float)f String:(NSString *)str」は引数になります.
関数の名前の後に「:」をつけて,「(型名)」「関数の中で使う変数名」と続きます.
第二引数からは「String」これは関数を実際に用いた時に,
何を引数として与えればよいか分かりやすくするためのものです.
つまり何でもいいです(あまり変なのはオススメしませんが).
その後は第一引数と同じです.
これで関数の定義ができます.
少し長くなりましたが,まだまだいきます!!
- (id)initWithFloat:(float)f String:(NSString *)str{
// 継承元の関数を呼ぶ時は[super *]を使う
self = [super init];
if(self){
// プロパティの初期化をする
self.myFloat = f;
// MyFirstClassを継承しているので,myStringプロパティが使える
self.myString = str;
}
return self;
}
// 継承元の関数を呼ぶ時は[super *]を使う
self = [super init];
if(self){
// プロパティの初期化をする
self.myFloat = f;
// MyFirstClassを継承しているので,myStringプロパティが使える
self.myString = str;
}
return self;
}
それでは,中身の説明です.
self = [super init];
ここでは,継承元のクラスのメソッドを呼び出しています.「self」とは,自分自身(インスタンス)のことです.
「[super init]」で継承元のインスタンスメソッドである「init」を呼び出しています.
その後,「init」が成功して,「self」に初期化されたインスタンスが格納されれば,
更に初期化を進めます.
if(self){
// プロパティの初期化をする
self.myFloat = f;
// MyFirstClassを継承しているので,myStringプロパティが使える
self.myString = str;
}
ちなみに,私が今まで組んできたプログラムで,「init」が失敗したことはありませんが,// プロパティの初期化をする
self.myFloat = f;
// MyFirstClassを継承しているので,myStringプロパティが使える
self.myString = str;
}
丁寧にエラー処理をすることは大切なので,みなさんも心がけていきましょう.
私にはできません笑
return self;
最後に自分自身を返り値としてreturnして終わりです.あれ??このメソッドの返り値は「id」型でしたよね??
ということは,MySecondClass型じゃないの??
と思われる方がいるかもしれません.
私もそう思いますが,初期化の際はid型を用いることになっているようです.
理由は各自調べてみて下さい笑
id型とはオブジェクトを表すもので,オブジェクトであれば,
全てid型で表すことができます.
といってもよくわからないと思いますので,
initメソッドの返り値はid型なんだ,くらいに思っておいてください.
長くなったので,続きは次の記事で.
次の記事へ
HOMEに戻る