Objective-C Language
metodi
Ricerca…
Sintassi
-
o+
: il tipo di metodo. Istanza o classe?(): Dove va il tipo di ritorno. Usa vuoto se non vuoi restituire nulla!
Il prossimo è il nome del metodo. Usa CamelCase e rendi il nome facile da ricordare e capire.
Se il tuo metodo ha bisogno di parametri, ora è il momento! Il primo parametro si trova subito dopo il nome della funzione in questo modo
:(type)parameterName
. Tutti gli altri parametri vengono fatti in questo modoparameterLabel:(type)parameterName
Che cosa fa il tuo metodo? Metti tutto qui, con le parentesi graffe {}!
Parametri del metodo
Se si desidera passare valori a un metodo quando viene chiamato, si utilizzano i parametri:
- (int)addInt:(int)intOne toInt:(int)intTwo {
return intOne + intTwo;
}
I due punti ( :
) separa il parametro dal nome del metodo.
Il tipo di parametro va tra parentesi (int)
.
Il nome del parametro segue il tipo di parametro.
Creare un metodo di base
Ecco come creare un metodo di base che registra "Hello World" sulla console:
- (void)hello {
NSLog(@"Hello World");
}
Il -
all'inizio denota questo metodo come metodo di istanza.
Il (void)
indica il tipo di ritorno. Questo metodo non restituisce nulla, quindi inserisci void
.
Il "ciao" è il nome del metodo.
Tutto in {}
è il codice eseguito quando viene chiamato il metodo.
Valori di ritorno
Quando si desidera restituire un valore da un metodo, si inserisce il tipo che si desidera restituire nella prima serie di parentesi.
- (NSString)returnHello {
return @"Hello World";
}
Il valore che si desidera restituire va dopo la parola chiave return
;
Metodi di classe
Viene chiamato un metodo di classe sulla classe a cui appartiene il metodo, non un'istanza di esso. Questo è possibile perché le classi Objective-C sono anche oggetti. Per indicare un metodo come metodo di classe, modifica il parametro -
in a +
:
+ (void)hello {
NSLog(@"Hello World");
}
Metodi di chiamata
Chiamando un metodo di istanza:
[classInstance hello];
@interface Sample
-(void)hello; // exposing the class Instance method
@end
@implementation Sample
-(void)hello{
NSLog(@"hello");
}
@end
Chiamando un metodo di istanza sull'istanza corrente:
[self hello];
@implementation Sample
-(void)otherMethod{
[self hello];
}
-(void)hello{
NSLog(@"hello");
}
@end
Chiamare un metodo che accetta argomenti:
[classInstance addInt:1 toInt:2];
@implementation Sample
-(void)add:(NSInteger)add to:(NSInteger)to
NSLog(@"sum = %d",(add+to));
}
@end
Chiamando un metodo di classe:
[Class hello];
@interface Sample
+(void)hello; // exposing the class method
@end
@implementation Sample
+(void)hello{
NSLog(@"hello");
}
@end
Metodi di istanza
Un metodo di istanza è un metodo disponibile su una particolare istanza di una classe, dopo che l'istanza è stata istanziata:
MyClass *instance = [MyClass new];
[instance someInstanceMethod];
Ecco come lo definisci:
@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
Passa attraverso il passaggio dei parametri di valore
Passando in base al valore del parametro che passa a un metodo, il valore del parametro effettivo viene copiato nel valore del parametro formale. Quindi il valore effettivo del parametro non cambierà dopo il ritorno dalla funzione chiamata.
@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
Chiamando i metodi:
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);
Produzione:
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
Passa passando il parametro di riferimento
Passando per riferimento al parametro che passa ad un metodo, l'indirizzo del parametro attuale viene passato al parametro formale. Quindi il valore effettivo del parametro verrà modificato dopo il ritorno dalla funzione chiamata.
@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
Chiamando i metodi:
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);
Produzione:
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