2012-02-20 4 views
8

私のアイデアは、javaでインタフェース型の変数を宣言するのと非常によく似ています。Objective-Cインターフェイスで 'プロトコル'タイプの変数を宣言できますか?

したがって例えば、

ヘッダファイル1:

@protocol Calculator 

@end 

Iは、次いで、上記Calculatorプロトコルを実装@interface CalculatorImplを定義します。ヘッダファイル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 

におけるエラーは、プロトコルのこの使用は、Objective-Cので禁止されていますか?

答えて

18

@protocolはタイプではないので、@propertyのタイプには使用できません。あなたはおそらく代わりに何をしたいのか

はこれです:

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

これはCalculatorプロトコルに準拠していることを除いて、その型に制限なし、とプロパティを宣言します。

+0

anyオブジェクトをタイプするように設定することで、そのタイプの制限がないプロパティを迅速に作成できますか? – Chris

4

あなたはプロトコルのインスタンスを作成することができないのObjective-Cでは

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

を使用する必要があり、あなたはそれに適合することができます。したがって、タイプCalculatorのオブジェクトを持つ代わりに、Calculatorプロトコルに準拠した汎用オブジェクトが必要です。

CalculatorImplは、インタフェース、ないプロトコルであるため、それ以外の場合、あなたは

@property (weak, nonatomic) CalculatorImpl* calculator; 

を使用することができます。

関連する問題