【问题标题】:Can I declare a variable of a 'protocol' type in an Objective-C interface?我可以在 Objective-C 接口中声明一个“协议”类型的变量吗?
【发布时间】:2012-02-20 12:11:26
【问题描述】:

我的想法很像在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 是否不允许这种协议使用?

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    @protocol 不是类型,因此您不能将其用于@property 的类型。

    您可能想要做的是:

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

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

    【讨论】:

    • 如何通过将其设置为键入任何对象来快速创建一个对它的类型没有限制的属性?
    【解决方案2】:

    你应该使用

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

    在 Objective-C 中你不能实例化一个协议,你只能遵守它。因此,您应该有一个符合Calculator 协议的通用对象,而不是Calculator 类型的对象。

    否则你可以使用

    @property (weak, nonatomic) CalculatorImpl* calculator;
    

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

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多