Поиск…


Синтаксис

  • - или + : тип метода. Экземпляр или класс?

  • (): Если возвращается тип возврата. Используйте void, если вы ничего не хотите возвращать!

  • Далее следует имя метода. Используйте camelCase и легко запоминайте имя.

  • Если ваш метод нуждается в параметрах, теперь самое время! Первый параметр появляется сразу после имени такой функции :(type)parameterName . Все остальные параметры выполняются таким образом parameterLabel:(type)parameterName

  • Что делает ваш метод? Поместите все здесь, в фигурные скобки {}!

Параметры метода

Если вы хотите передать значения методу при его вызове, вы используете параметры:

- (int)addInt:(int)intOne toInt:(int)intTwo {
  return intOne + intTwo;
}

Двоеточие ( : ) отделяет параметр от имени методы.

Тип параметра входит в круглые скобки (int) .

Имя параметра следует после типа параметра.

Создайте базовый метод

Вот как создать базовый метод, который записывает «Hello World» на консоль:

- (void)hello {
  NSLog(@"Hello World");
}

Параметр - в начале обозначает этот метод как метод экземпляра.

(void) обозначает тип возврата. Этот метод ничего не возвращает, поэтому вы вводите void .

«Привет» - это имя метода.

Все в {} - это запуск кода при вызове метода.

Возвращаемые значения

Когда вы хотите вернуть значение из метода, вы помещаете тип, который хотите вернуть, в первом наборе круглых скобок.

- (NSString)returnHello {
  return @"Hello World";
}

Значение, которое вы хотите вернуть, следует после ключевого слова return ;

Методы класса

Метод класса вызывается классу, к которому принадлежит метод, а не экземпляром его. Это возможно, потому что классы Objective-C также являются объектами. Для того, чтобы обозначить метод как метод класса, изменить - к + :

+ (void)hello {
  NSLog(@"Hello World");
}

Методы вызова

Вызов метода экземпляра:

[classInstance hello];

 @interface Sample
 -(void)hello; // exposing the class Instance method
 @end

 @implementation Sample
     -(void)hello{
        NSLog(@"hello");
      }
 @end

Вызов метода экземпляра для текущего экземпляра:

[self hello];

@implementation Sample

     -(void)otherMethod{
       [self hello];
     }

     -(void)hello{
        NSLog(@"hello");
      }
 @end

Вызов метода, который принимает аргументы:

[classInstance addInt:1 toInt:2];

 @implementation Sample
     -(void)add:(NSInteger)add to:(NSInteger)to
        NSLog(@"sum = %d",(add+to));
      }
 @end

Вызов метода класса:

[Class hello];

 @interface Sample
 +(void)hello; // exposing the class method
 @end

 @implementation Sample
     +(void)hello{
        NSLog(@"hello");
      }
 @end

Методы экземпляра

Метод экземпляра - это метод, доступный для определенного экземпляра класса после создания экземпляра экземпляра:

MyClass *instance = [MyClass new];
[instance someInstanceMethod];

Вот как вы его определяете:

@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

Передача по параметру параметра

При прохождении значения параметра, передаваемого методу, фактическое значение параметра копируется в значение формального параметра. Таким образом, фактическое значение параметра не изменится после возврата из вызываемой функции.

@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

Вызов методов:

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);

Выход:

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

Передача по эталонному параметру

В проходе по ссылке передачи параметра методу адрес фактического параметра передается формальному параметру. Таким образом, фактическое значение параметра будет изменено после возврата из вызываемой функции.

@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

Вызов методов:

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);

Выход:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow