Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 强制变量声明协议-目标C_Iphone_Objective C_Ios_Protocols - Fatal编程技术网

Iphone 强制变量声明协议-目标C

Iphone 强制变量声明协议-目标C,iphone,objective-c,ios,protocols,Iphone,Objective C,Ios,Protocols,是否可以在@protocol中声明变量?只是为了迫使程序员在实现类(实现此协议的类)的头和实现中添加这些变量 谢谢简短回答:不,这是不可能的。您最多可以强制实现方法和属性的可用性。您不能在@protocol中声明IVAR,但您可以强制一致性类实现一个访问器和一个变异器,这听起来像是您要实现的。例如: @protocol Priced @property(assign, nonatomic) double price; @end @interface Carrot : NSObject <

是否可以在@protocol中声明变量?只是为了迫使程序员在实现类(实现此协议的类)的头和实现中添加这些变量


谢谢

简短回答:不,这是不可能的。您最多可以强制实现方法和属性的可用性。

您不能在
@protocol
中声明IVAR,但您可以强制一致性类实现一个访问器和一个变异器,这听起来像是您要实现的。例如:

@protocol Priced
@property(assign, nonatomic) double price;
@end

@interface Carrot : NSObject <Priced> {
    double price;
}
@end
@implementation Carrot
@synthesize price;
@end
@协议定价
@财产(转让,非原子)双倍价格;
@结束
@接口Carrot:NSObject{
双倍价格;
}
@结束
@实施胡萝卜
@综合价格;
@结束

您可以使对象成为一个具体的子类。这将是确保它们包含您需要的内部构件的唯一方法。当然,如果您对类如何在内部存储数据感兴趣。。。这违反了一些面向对象的范例。

谢谢你,鲁迪,这只是一个想法。当我实施一个非常奇怪的设计范例时。有什么解决办法吗?你不应该在意对象使用的是什么实例变量。声明属性,并让实现协议的类按照自己的意愿获取和设置它。无解决方法。我不知道有什么可以强制存在某个实例变量。试着用一个属性来代替。是的,我知道有一种方法,也就是行为。但是考虑到强迫程序员添加一个必须变量。谢谢1,虽然在Objy-C中子类(用户)类似乎比(例如)C++更少见, @协议>代码可能不是OP需要的正确工具。我认为很多cocoa/iOS程序员使用他们熟悉的工具,这是可以理解的。。。除了C++和java之外,在大学里已经有20年的OOP课程了。