Objective-C Language
Metody
Szukaj…
Składnia
-
lub+
: rodzaj metody. Instancja czy klasa?(): Gdzie idzie typ zwrotu. Użyj void, jeśli nie chcesz niczego zwracać!
Dalej jest nazwa metody. Użyj camelCase i spraw, aby nazwa łatwo zapamiętać zrozumienie.
Jeśli twoja metoda potrzebuje parametrów, teraz jest czas! Pierwszy parametr występuje zaraz po nazwie funkcji w następujący sposób
:(type)parameterName
. Wszystkie pozostałe parametry są wykonywane w ten sposóbparameterLabel:(type)parameterName
Co robi twoja metoda? Połóż to tutaj, w nawiasach klamrowych {}!
Parametry metody
Jeśli chcesz przekazać wartości do wywołanej metody, użyj parametrów:
- (int)addInt:(int)intOne toInt:(int)intTwo {
return intOne + intTwo;
}
Dwukropek ( :
) oddziela parametr z nazwą metody.
Typ parametru znajduje się w nawiasach (int)
.
Nazwa parametru jest zgodna z typem parametru.
Utwórz podstawową metodę
Oto jak stworzyć podstawową metodę, która loguje „Hello World” do konsoli:
- (void)hello {
NSLog(@"Hello World");
}
-
na początku oznacza tę metodę jako metodę instancji.
(void)
oznacza typ zwrotu. Ta metoda niczego nie zwraca, więc wpisujesz void
.
„Witaj” to nazwa metody.
Wszystko w {}
to kod uruchamiany przy wywołaniu metody.
Zwróć wartości
Gdy chcesz zwrócić wartość z metody, umieść typ, który chcesz zwrócić, w pierwszym zestawie nawiasów.
- (NSString)returnHello {
return @"Hello World";
}
Wartość, którą chcesz zwrócić, występuje po słowie kluczowym return
;
Metody klasowe
Wywoływana jest metoda klasy, do której należy metoda, a nie jej instancja. Jest to możliwe, ponieważ klasy Objective-C są również obiektami. Aby oznaczyć metodę jako metodę klasy, zmień -
na +
:
+ (void)hello {
NSLog(@"Hello World");
}
Metody wywoływania
Wywołanie metody wystąpienia:
[classInstance hello];
@interface Sample
-(void)hello; // exposing the class Instance method
@end
@implementation Sample
-(void)hello{
NSLog(@"hello");
}
@end
Wywołanie metody instancji w bieżącej instancji:
[self hello];
@implementation Sample
-(void)otherMethod{
[self hello];
}
-(void)hello{
NSLog(@"hello");
}
@end
Wywołanie metody, która przyjmuje argumenty:
[classInstance addInt:1 toInt:2];
@implementation Sample
-(void)add:(NSInteger)add to:(NSInteger)to
NSLog(@"sum = %d",(add+to));
}
@end
Wywołanie metody klasy:
[Class hello];
@interface Sample
+(void)hello; // exposing the class method
@end
@implementation Sample
+(void)hello{
NSLog(@"hello");
}
@end
Metody instancji
Metoda instancji to metoda dostępna w konkretnej instancji klasy po utworzeniu instancji:
MyClass *instance = [MyClass new];
[instance someInstanceMethod];
Oto jak je zdefiniujesz:
@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
Przekazywanie parametru wartości przekazywanej
W trakcie przekazywania wartości parametru do metody rzeczywista wartość parametru jest kopiowana do formalnej wartości parametru. Tak więc rzeczywista wartość parametru nie zmieni się po powrocie z wywoływanej funkcji.
@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
Wywołanie metod:
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);
Wynik:
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
Przekazywanie przez parametr referencyjny przechodzi
Przekazywane przez odniesienie parametru przekazanego do metody adres rzeczywistego parametru jest przekazywany do parametru formalnego. Tak więc rzeczywista wartość parametru zostanie zmieniona po powrocie z wywoływanej funkcji.
@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
Wywołanie metod:
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);
Wynik:
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