Objective-C Language
metoder
Sök…
Syntax
-
eller+
: Typ av metod. Instans eller klass?(): Var returtypen går. Använd tomrum om du inte vill returnera någonting!
Nästa är metodens namn. Använd camelCase och gör namnet lätt att komma ihåg att förstå.
Om din metod behöver parametrar är det nu dags! Den första parametern kommer direkt efter namnet på funktionen så här
:(type)parameterName
. Alla andra parametrar görs på detta sättparameterLabel:(type)parameterName
Vad gör din metod? Lägg allt här i de lockiga hängslen {}!
Metodparametrar
Om du vill överföra värden till en metod när den heter, använder du parametrar:
- (int)addInt:(int)intOne toInt:(int)intTwo {
return intOne + intTwo;
}
Kolon ( :
) separerar parametern från metodnamnet.
Parametertypen går inom parenteserna (int)
.
Parameternamnet går efter parametertypen.
Skapa en grundläggande metod
Så här skapar du en grundläggande metod som loggar "Hello World" till konsolen:
- (void)hello {
NSLog(@"Hello World");
}
Den -
i början anger denna metod som en instansmetod.
(void)
anger returtypen. Den här metoden returnerar ingenting, så du anger void
.
"Hej" är metodens namn.
Allt i {}
är kodkörningen när metoden kallas.
Returnera värden
När du vill returnera ett värde från en metod sätter du den typ du vill returnera i den första uppsättningen parenteser.
- (NSString)returnHello {
return @"Hello World";
}
Det värde som du vill återvända går efter return
nyckelordet;
Klassmetoder
En klassmetod kallas på klassen metoden tillhör, inte en instans av den. Detta är möjligt eftersom Objekt-C-klasser också är objekt. För att beteckna en metod som en klassmetod, ändra -
till en +
:
+ (void)hello {
NSLog(@"Hello World");
}
Ringmetoder
Ringa en instansmetod:
[classInstance hello];
@interface Sample
-(void)hello; // exposing the class Instance method
@end
@implementation Sample
-(void)hello{
NSLog(@"hello");
}
@end
Ringa en instansmetod i den aktuella instansen:
[self hello];
@implementation Sample
-(void)otherMethod{
[self hello];
}
-(void)hello{
NSLog(@"hello");
}
@end
Anropa en metod som tar argument:
[classInstance addInt:1 toInt:2];
@implementation Sample
-(void)add:(NSInteger)add to:(NSInteger)to
NSLog(@"sum = %d",(add+to));
}
@end
Ringa en klassmetod:
[Class hello];
@interface Sample
+(void)hello; // exposing the class method
@end
@implementation Sample
+(void)hello{
NSLog(@"hello");
}
@end
Instansmetoder
En instansmetod är en metod som är tillgänglig i en viss instans av en klass, efter att instansen har instanserats:
MyClass *instance = [MyClass new];
[instance someInstanceMethod];
Så här definierar du en:
@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
Passera efter värdeparameter som passerar
I pass-by-värdet för parametern som överförs till en metod, kopieras det verkliga parametervärdet till det formella parametervärdet. Så faktiskt parametervärde kommer inte att ändras efter att ha återvänt från den kallade funktionen.
@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
Anropa metoderna:
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);
Produktion:
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
Passera genom referensparameter passering
I förbindelse med referens till parameteröverföring till en metod överförs adressen till den faktiska parametern till den formella parametern. Så faktiskt parametervärde kommer att ändras efter att ha återgått från den kallade funktionen.
@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
Anropa metoderna:
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);
Produktion:
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