Цель C - Ошибка с пользовательским типом возврата? - PullRequest
0 голосов
/ 01 декабря 2011

Я очень плохо знаком с Objective-C, так что это, вероятно, очень просто.

Во всяком случае, я пытаюсь указать собственный тип возвращаемого значения в своем классе, и я продолжаю получать сообщения о том, что классу либо требуется звездочка *, либо он вообще не считается типом. Я прочитал, что вам нужно использовать @class вместо #import в заголовочных файлах, но в этом случае это не помогает. Что еще я делаю не так?

Вот мой код:

#import <Foundation/Foundation.h>

@class Room;

@interface LevelData : NSObject {

@private

    NSArray *data;
    Room *currentRoom;

}

+(void)initialize;
+(*Room)getCurrentRoom;

@end

Спасибо большое!

Ответы [ 2 ]

1 голос
/ 01 декабря 2011
  1. Звездочка должна идти после имени класса, как стандартный указатель в стиле C.
  2. Методы класса должны возвращать значение, обычно указатель на объект того же класса, так что если выиспользуйте initialize, вы захотите, чтобы он возвращал Room*.
  3. Хорошей практикой кодирования является переопределение -(Class *) init;, но только в случае необходимости.Это потому, что первое, что вы (или кто-то другой, использующий ваш код) должны / будут делать при использовании объекта (обычно), это вызвать некоторую форму [[Class alloc] init].Если они вызовут это, когда у вас будет специальная функция initialize, она вместо этого вызовет метод NSObject -(NSObject *)init;, и ваши переменные экземпляра не получат настройки.
1 голос
/ 01 декабря 2011

изменить эту строку на:

+(Room *)getCurrentRoom;

и посмотрим, скомпилируется ли это. Room * указывает, что вы возвращаете указатель на объект Room Objective-C.

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