我的想法非常类似于在java中声明一个接口类型的变量.
所以,例如,
头文件1:
@protocol Calculator
@end
Run Code Online (Sandbox Code Playgroud)
然后我定义了一个@interface CalculatorImpl实现上述Calculator协议的方法.
在头文件2中:
@interface SomeViewController : UIViewController {
}
@property (weak, nonatomic) IBOutlet UITextField *txtResult;
@property (weak, nonatomic) Calculator* calculator;
@end
Run Code Online (Sandbox Code Playgroud)
但是,xcode会在计算器行标记错误
property with 'weak' attribute must be of object type
Run Code Online (Sandbox Code Playgroud)
Objective-c是否禁止使用协议?
yuj*_*uji 26
A @protocol不是一种类型,因此您不能将其用作a的类型@property.
您可能想要做的是:
@property (weak, nonatomic) id <Calculator> calculator;
Run Code Online (Sandbox Code Playgroud)
这声明了一个属性,对其类型没有限制,只不过它符合Calculator协议.
你应该使用
@property (weak, nonatomic) id <Calculator> calculator;
Run Code Online (Sandbox Code Playgroud)
在 Objective-C 中你不能实例化一个协议,你只能遵守它。因此,与其拥有 type 的Calculator对象,不如拥有一个符合Calculator 协议的通用对象。
否则你可以使用
@property (weak, nonatomic) CalculatorImpl* calculator;
Run Code Online (Sandbox Code Playgroud)
因为CalculatorImpl是接口,而不是协议。
| 归档时间: |
|
| 查看次数: |
5884 次 |
| 最近记录: |