Objective-C Language
методы
Поиск…
Синтаксис
-
или+
: тип метода. Экземпляр или класс?(): Если возвращается тип возврата. Используйте 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