我可以声明一个'协议的变量'输入Objective-C接口?

时间:2012-02-20 12:11:26

标签: objective-c

我的想法非常类似于在java中声明接口类型的变量。

例如,

头文件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 

objective-c不允许使用协议吗?

2 个答案:

答案 0 :(得分:24)

@protocol不是类型,因此您无法将其用作@property的类型。

您可能想要做的是:

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

这声明了一个对其类型没有限制的属性,只不过它符合Calculator协议。

答案 1 :(得分:4)

你应该使用

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

在Objective-C中,您无法实例化协议,只能符合它。因此,您应该拥有符合Calculator协议的通用对象,而不是具有Calculator类型的对象。

否则你可以使用

@property (weak, nonatomic) CalculatorImpl* calculator;

因为CalculatorImpl是一个接口,而不是协议。