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ób parameterLabel:(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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow