Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Задача C: Когда нам нужно создать новый протокол делегата?

Автор вопроса: ZhenОтветов: 1

Я просматривал несколько примеров кода и наткнулся на это приложение, в котором есть следующие классы

1) FaceView Class - рисует лицо и настраиваемую улыбку 2) HappinessViewContoller Class - устанавливает улыбку на лице, нарисованную на основе ввода ползунка в интерфейсе.

Программа фактически реализует протокол делегата в классе FaceView.h, как показано ниже.

#import <UIKit/UIKit.h>

@class FaceView;

@protocol FaceViewDelegate
- (float)smileForFaceView:(FaceView *)requestor;  // -1.0 (frown) to 1.0 (smile)
@end

@interface FaceView : UIView {
    id <FaceViewDelegate> delegate;
}

@property (assign) id <FaceViewDelegate> delegate;

@end

и HappinessViewController заявляет, что он использует FaceViewDelegate

#import <UIKit/UIKit.h>
#import "FaceView.h"

@interface HappinessViewController : UIViewController <FaceViewDelegate>
{
    int happiness; // 0 to 100
    UISlider *slider;
    FaceView *faceView;
}

@property int happiness;

@property (retain) IBOutlet UISlider *slider;
@property (retain) IBOutlet FaceView *faceView;

- (IBAction)happinessChanged:(UISlider *)sender;

@end

Я немного смущен тем, почему в этом сценарии требуется протокол делегата. Могу я просто установить метод "- (float) smileForFaceView: (FaceView *) requestor;" непосредственно в HappinessViewController без объявления делегата faceView?

Спасибо!

Чжэнь Хоэ

objective-cdelegatesprotocols

Ответы

Ответ 1 · рейтинг 1 · ughoavgfhw

Никогда не требуется создавать протокол для делегатов, но это упрощает обеспечение совместимости, если есть методы, которые делегат должен реализовать. В этом случае, когда делегат установлен, объект FaceView может использовать [newDelegate conformsToProtocol:@protocol(FaceViewDelegate)], чтобы убедиться, что делегат реализует любые требуемые методы. Если они решат добавить больше требуемых методов, им не придется изменять свой код, потому что делегат должен реализовать все необходимые методы, чтобы соответствовать.

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы