Могу ли я объявить переменную типа «протокол» в интерфейсе Objective-C? - PullRequest
12 голосов
/ 20 февраля 2012

Моя идея очень похожа на объявление переменной типа интерфейса в Java.

Так, например,

заголовочный файл 1:

@protocol Calculator

@end

I тогдаопределите @interface CalculatorImpl, который реализует вышеупомянутый протокол Calculator.

В заголовочном файле 2:

@interface SomeViewController : UIViewController {


}

@property (weak, nonatomic) IBOutlet UITextField *txtResult;
@property (weak, nonatomic) Calculator* calculator;

@end

Однако xcode будет отмечать ошибку в строке калькулятора

property with 'weak' attribute must be of object type 

Запрещено ли это использование протокола целью-c?

Ответы [ 2 ]

25 голосов
/ 20 февраля 2012

A @protocol не является типом, поэтому его нельзя использовать для типа @property.

Вместо этого вы, вероятно, захотите сделать следующее:

@property (weak, nonatomic) id <Calculator> calculator;

Здесь объявляется свойство без ограничения его типа, за исключением того, что оно соответствует протоколу Calculator.

4 голосов
/ 20 февраля 2012

Вы должны использовать

@property (weak, nonatomic) id <Calculator> calculator;

В Objective-C вы не можете создать экземпляр протокола, вы можете только соответствовать ему.Таким образом, вместо объекта типа Calculator у вас должен быть общий объект, соответствующий протоколу Calculator.

В противном случае вы можете использовать

@property (weak, nonatomic) CalculatorImpl* calculator;

, начиная с CalculatorImpl это интерфейс, а не протокол.

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