Objective-C Language
methoden
Zoeken…
Syntaxis
-
of+
: het type methode. Instantie of klas?(): Waar het retourtype naartoe gaat. Gebruik ongeldig als u niets wilt retourneren!
Hierna volgt de naam van de methode. Gebruik camelCase en maak de naam gemakkelijk te onthouden en te begrijpen.
Als uw methode parameters nodig heeft, is dit het moment! De eerste parameter komt direct na de naam van de functie als volgt
:(type)parameterName
. Alle andere parameters worden op deze manier gedaanparameterLabel:(type)parameterName
Wat doet jouw methode? Zet alles hier, in de accolades {}!
Methode parameters
Als u waarden wilt doorgeven aan een methode wanneer deze wordt aangeroepen, gebruikt u parameters:
- (int)addInt:(int)intOne toInt:(int)intTwo {
return intOne + intTwo;
}
De dubbele punt ( :
) scheidt de parameter de naam methode.
Het parametertype staat tussen haakjes (int)
.
De parameternaam gaat achter het parametertype.
Maak een basismethode
Zo maakt u een basismethode waarmee 'Hello World' wordt vastgelegd in de console:
- (void)hello {
NSLog(@"Hello World");
}
De -
in het begin geeft deze methode aan als een instantiemethode.
De (void)
geeft het retourtype aan. Deze methode geeft niets, zodat u in te voeren void
.
De 'hallo' is de naam van de methode.
Alles in {}
is de code die wordt uitgevoerd wanneer de methode wordt aangeroepen.
Retourwaarden
Wanneer u een waarde van een methode wilt retourneren, plaatst u het type dat u wilt retourneren in de eerste set haakjes.
- (NSString)returnHello {
return @"Hello World";
}
De waarde die u wilt retourneren, gaat achter het trefwoord return
;
Klasse methoden
Een klassemethode wordt aangeroepen op de klasse waartoe de methode behoort, geen instantie ervan. Dit is mogelijk omdat Objective-C-klassen ook objecten zijn. Om een methode als klassemethode aan te duiden, wijzigt u de -
in een +
:
+ (void)hello {
NSLog(@"Hello World");
}
Oproepmethoden
Een instantiemethode oproepen:
[classInstance hello];
@interface Sample
-(void)hello; // exposing the class Instance method
@end
@implementation Sample
-(void)hello{
NSLog(@"hello");
}
@end
Een instantiemethode aanroepen voor de huidige instance:
[self hello];
@implementation Sample
-(void)otherMethod{
[self hello];
}
-(void)hello{
NSLog(@"hello");
}
@end
Een methode aanroepen waarvoor argumenten nodig zijn:
[classInstance addInt:1 toInt:2];
@implementation Sample
-(void)add:(NSInteger)add to:(NSInteger)to
NSLog(@"sum = %d",(add+to));
}
@end
Een klassenmethode oproepen:
[Class hello];
@interface Sample
+(void)hello; // exposing the class method
@end
@implementation Sample
+(void)hello{
NSLog(@"hello");
}
@end
Instantiemethoden
Een instantiemethode is een methode die beschikbaar is op een bepaalde instantie van een klasse, nadat de instantie is geïnstantieerd:
MyClass *instance = [MyClass new];
[instance someInstanceMethod];
Zo definieert u er een:
@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
Pass door waarde parameter doorgeven
Bij de pass-by-waarde van de parameter die aan een methode wordt doorgegeven, wordt de werkelijke parameterwaarde gekopieerd naar de formele parameterwaarde. De werkelijke parameterwaarde zal dus niet veranderen na terugkomst van de opgeroepen functie.
@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
Aanroepen van de methoden:
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);
Output:
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
Pass door referentie parameter doorgeven
In het doorgeven van de parameter die aan een methode wordt doorgegeven, wordt het adres van de werkelijke parameter doorgegeven aan de formele parameter. De werkelijke parameterwaarde wordt dus gewijzigd na terugkeer van de opgeroepen functie.
@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
Aanroepen van de methoden:
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);
Output:
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