Элементарный Obj-C Вопрос о методах боя - PullRequest
0 голосов
/ 10 января 2010

взять пример:

-(void)setName:(NSString *)name age:(int)age;

Как бы вы назвали этот метод (другими словами, имя метода setName, но что там делает параметр "age") и что означают типы в скобках? Это просто способ сообщить компилятору, какие типы возвращаются?

Ответы [ 6 ]

3 голосов
/ 10 января 2010

[ myObject setName: @"Adam" age:18 ];

Параметр age является вторым параметром в сигнатуре метода.

Типы в скобках - это ожидаемые типы аргумента. например name ожидает только NSString, а age ожидает только int.

- означает, что метод является методом экземпляра, а не методом класса, который обозначается с помощью + вместо.

Тип в скобках сразу после - является типом возвращаемого значения.

Это отличный сайт для изучения основ Objective-C: CocoaDevCentral

1 голос
/ 10 января 2010

Имя метода на самом деле таково:

setName:age:

Вы называете это так:

[someObject setName:@"Alice" age:20];

setName:age: также является уникальной подписью этого метода, и с этой подписью вы можете вызывать этот метод для любого объекта, который вы пожелаете. Например:

NSArray* objects = ...

SEL mySelector = @selector(setName:age:);
for (id object in objects)
{
    if ([object respondsToSelector:mySelector])
    {
        [object setName:@"Alice" age:20];
    }
}

что означают типы в скобках? Это просто способ сообщить компилятору, какие типы возвращаются?

Да, это "C бросает". Если бы все было объектом, вам бы это не понадобилось, но поскольку вы можете передавать и возвращать простые и старые типы C в ваши методы и из них, компилятору необходимо знать типы ваших параметров и возвращаемые значения.

1 голос
/ 10 января 2010

Чтобы ответить, понадобится немного больше информации, но я буду догадываться, что это от какого-то класса с именем aClass, и у вас есть экземпляр aClass, названный instance.

-(void)setName:(NSString *)name age:(int)age;

означает, что у вас есть метод с именем setName: age:, которому нужно два аргумента, один NSString, один int, и он возвращает void. Поскольку он - как первый символ, это метод экземпляра.

[instance setName:@"James Hargrove" age:21];

Будет вызывать setName: age: для экземпляра.

(Экземпляр должен быть создан, скажем,

aClass *instance = [[aClass alloc] init];

, который создаст экземпляр класса с именем instance и инициализирует его.

1 голос
/ 10 января 2010

Это стандартный синтаксис метода Objective-C. Это можно прочитать как:

Метод без возвращаемого значения (void), который устанавливает имя объекта (параметр NSString *) и возраст (и целое число параметр).

Рассечение метода:

  • "-" Дефис утверждает, что это метод экземпляра.

  • (void) Тип возвращаемого значения void - или тип возврата не ожидается

  • setName: (NSString *) Первый передаваемый параметр это "имя" и является NSString *.

  • age: (int) age Второй параметр быть пройден "возраст" и является int.

На самом деле, синтаксис метода на самом деле довольно самодокументированный, когда-то понимаемый (и совершенно чужой, если вы привыкли к более традиционному синтаксису C / C ++ или Java).

Фактический пример вызова этого метода:

[someObject setName:@"Rich" age:101];
0 голосов
/ 10 января 2010

Итак, вы бы назвали этот метод следующим образом.

Скажите, что это метод объекта с именем foo (класса Foo). Тогда вы бы позвонили:

[foo setName:someName age:someAge].

Если бы это был статический метод, ему предшествовал бы знак «+» вместо «минус» следующим образом:

+(void)setName:(NSString *)name age:(int)age;

Тогда вы бы позвонили

[Foo setName:someName age:someAge] //use the classname instead of the object name

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

На самом деле вы можете писать функции Obj-C в нескольких разных стилях, пропуская некоторые из этих вещей. Вы даже можете написать прямо в стиле C.

0 голосов
/ 10 января 2010

Вы бы назвали этот метод так:

[classInstance setName:@"name" age:123];

Первый экземпляр «age:» указывает, что метод получает другой параметр, называемый «age», когда используется при реализации метода.

Типы в скобках указывают типы данных, которые ожидаются для каждого параметра, за исключением первого «void», что означает, что этот метод ничего не возвращает.

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