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ätt parameterLabel:(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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow