Objective-C Language
メソッド
サーチ…
構文
-
または+
:メソッドのタイプ。インスタンスまたはクラス?():戻り値の型がどこに行くか。何も返さない場合は、voidを使用してください。
次はメソッドの名前です。 camelCaseを使用して、名前を理解しやすいようにします。
メソッドにパラメータが必要な場合は、今度は時間です!最初のパラメータは、関数の名前の直後にあり
:(type)parameterName
。他のすべてのパラメータはこのようにして行われparameterLabel:(type)parameterName
あなたの方法は何をしていますか?中括弧{}でここにすべて入れてください!
メソッドパラメータ
メソッドが呼び出されたときに値を渡す場合は、次のようにパラメータを使用します。
- (int)addInt:(int)intOne toInt:(int)intTwo {
return intOne + intTwo;
}
コロン( :
)メソッド名からパラメータを分離します。
パラメータの型はかっこ(int)
ます。
パラメータ名は、パラメータタイプの後に続きます。
基本的な方法を作成する
これはコンソールに「Hello World」を記録する基本的な方法を作成する方法です:
- (void)hello {
NSLog(@"Hello World");
}
最初の-
は、このメソッドをインスタンスメソッドとして示しています。
(void)
は戻り値の型を示します。このメソッドは何も返さないので、 void
を入力しvoid
。
'hello'はメソッドの名前です。
{}
内のすべては、メソッドが呼び出されたときに実行されるコードです。
戻り値
メソッドから値を返す場合は、返す型を最初の括弧のセットに入れます。
- (NSString)returnHello {
return @"Hello World";
}
返す値はreturn
キーワードの後に来ます。
クラスメソッド
クラスメソッドは、そのメソッドが属するクラスで呼び出され、そのインスタンスは呼び出されません。 Objective-Cクラスもオブジェクトなので、これは可能です。クラスメソッドとしてメソッドを示すために、変更する-
に+
:
+ (void)hello {
NSLog(@"Hello World");
}
メソッドの呼び出し
インスタンスメソッドの呼び出し:
[classInstance hello];
@interface Sample
-(void)hello; // exposing the class Instance method
@end
@implementation Sample
-(void)hello{
NSLog(@"hello");
}
@end
現在のインスタンスでインスタンスメソッドを呼び出す:
[self hello];
@implementation Sample
-(void)otherMethod{
[self hello];
}
-(void)hello{
NSLog(@"hello");
}
@end
引数を取るメソッドを呼び出す:
[classInstance addInt:1 toInt:2];
@implementation Sample
-(void)add:(NSInteger)add to:(NSInteger)to
NSLog(@"sum = %d",(add+to));
}
@end
クラスメソッドの呼び出し:
[Class hello];
@interface Sample
+(void)hello; // exposing the class method
@end
@implementation Sample
+(void)hello{
NSLog(@"hello");
}
@end
インスタンスメソッド
インスタンスメソッドは、インスタンスがインスタンス化された後、クラスの特定のインスタンスで使用できるメソッドです。
MyClass *instance = [MyClass new];
[instance someInstanceMethod];
定義方法は次のとおりです。
@interface MyClass : NSObject
- (void)someInstanceMethod; // "-" denotes an instance method
@end
@implementation MyClass
- (void)someInstanceMethod {
NSLog(@"Whose idea was it to have a method called \"someInstanceMethod\"?");
}
@end
値渡しのパラメータ渡し
メソッドに渡すパラメータの値渡しでは、実際のパラメータ値が仮パラメータ値にコピーされます。したがって、実際のパラメータ値は、呼び出された関数から戻ると変更されません。
@interface SwapClass : NSObject
-(void) swap:(NSInteger)num1 andNum2:(NSInteger)num2;
@end
@implementation SwapClass
-(void) num:(NSInteger)num1 andNum2:(NSInteger)num2{
int temp;
temp = num1;
num1 = num2;
num2 = temp;
}
@end
メソッドを呼び出す:
NSInteger a = 10, b =20;
SwapClass *swap = [[SwapClass alloc]init];
NSLog(@"Before calling swap: a=%d,b=%d",a,b);
[swap num:a andNum2:b];
NSLog(@"After calling swap: a=%d,b=%d",a,b);
出力:
2016-07-30 23:55:41.870 Test[5214:81162] Before calling swap: a=10,b=20
2016-07-30 23:55:41.871 Test[5214:81162] After calling swap: a=10,b=20
参照パラメータ渡しで渡す
メソッドに渡すパラメータの参照によるパスでは、実際のパラメータのアドレスが仮パラメータに渡されます。したがって、実際のパラメータ値は、呼び出された関数から戻った後に変更されます。
@interface SwapClass : NSObject
-(void) swap:(int)num1 andNum2:(int)num2;
@end
@implementation SwapClass
-(void) num:(int*)num1 andNum2:(int*)num2{
int temp;
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
@end
メソッドを呼び出す:
int a = 10, b =20;
SwapClass *swap = [[SwapClass alloc]init];
NSLog(@"Before calling swap: a=%d,b=%d",a,b);
[swap num:&a andNum2:&b];
NSLog(@"After calling swap: a=%d,b=%d",a,b);
出力:
2016-07-31 00:01:47.067 Test[5260:83491] Before calling swap: a=10,b=20
2016-07-31 00:01:47.070 Test[5260:83491] After calling swap: a=20,b=10