2012-02-20 28 views
8

我的想法非常類似於在java中聲明接口類型的變量。我可以在Objective-C界面中聲明一個'協議'類型的變量嗎?

因此,例如,

頭文件1:

@protocol Calculator 

@end 

我然後定義一個@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不允許?

回答

18

A @protocol不是一種類型,因此您不能將它用於@property的類型。

什麼你可能想要做的,而不是這樣的:

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

聲明一個屬性上的類型沒有限制,但它符合Calculator協議。

+0

如何通過將其設置爲輸入anyobject來創建一個屬性,而不會限制它在swift中的類型? – Chris 2016-02-17 04:42:28

4

您應該使用

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

在Objective-C,你不能實例化一個協議,你只能順應它。因此,您應該擁有一個符合Calculator協議的通用對象,而不是Calculator類型的對象。

否則,你可以使用

@property (weak, nonatomic) CalculatorImpl* calculator; 

因爲CalculatorImpl是一個接口,而不是協議。

相關問題