Как можно наследовать два класса на одном слое? - PullRequest
2 голосов
/ 03 февраля 2009

Я новичок в области iPhone. я пытаюсь создать приложение для iPhone с помощью Cocos2d. Я использовал этот тип classe, как ниже -

@interface MenuScene : Scene {}
@end


@interface FlipView : UIImageView
{
    CGPoint startTouchPosition;
    NSString *dirString;
    UIImageView *firstPieceView;   
    UIImageView *secondPieceView;

}
@end

@interface HelloController : UIViewController 
@end


@interface MenuLayer: Layer{        
        Menu * menu;        
    NSString *dirString;
    CGPoint startTouchPosition;
}
-(void) button1: (id)sender;
-(void) button2: (id)sender;
-(void) black_jack: (id)sender;
@end

и я хочу наследовать два класса (FlipView, HelloController) в MenuLayerClass. но как я могу это сделать. Собственно какой будет синтаксис. Просьба ответить на любой комментарий с кодом или синтаксисом, как я могу это сделать.

Ответы [ 2 ]

8 голосов
/ 09 февраля 2009

Вы не можете. Как говорит Кларк, Objective-C не поддерживает множественное наследование. Это потому, что дизайнеры считают, что преимущества множественного наследования не оправдывают сложность и плохой дизайн, который он поощряет.

Вместо этого они включили что-то, что будет соответствовать вашим потребностям. Вы можете объявить «протокол», используя директиву @protocol. Протокол описывает набор методов, на которые класс отвечает, но не может добавить данные к объекту.

Чтобы использовать протокол, вы должны указать имя протокола в угловых скобках после суперкласса.

например.

@protocol myProtocol
-(void)myProtocolMethod
@end

@interface myClass : NSObject <myProtocol>
{
    int someData;
}

Даст подкласс NSObject, который также должен отвечать на сообщения (void)myProtocolMethod.

Тем не менее, я согласен с Кларком, что вам следует пересмотреть свой дизайн - имея один объект, который является одновременно FlipView, HelloController не звучит хорошо. Вероятно, вам следует реализовать FlipController и использовать третий класс (модель) для синхронизации состояния между двумя контроллерами - или, если ваше приложение очень простое, иметь один класс, который действует как делегат для FlipView и UIController.

1 голос
/ 07 февраля 2009

Вы не можете, поскольку Objective-C не имеет множественного наследования. Кроме того, на самом деле не имеет смысла иметь один класс как для представления, так и для контроллера представления.

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