2011-09-06 66 views

回答

9

简短的回答:不,这是不可能做到这一点。您最多可以强制实施方法和属性。

+0

谢谢鲁迪,这只是一个想法。当我执行一个非常奇怪的设计范例时。任何工作? – doNotCheckMyBlog

+2

您不应该关心哪些实例变量对象会发生使用。声明属性并让实现该协议的类获取并设置它,但是他们想要。 – Tommy

+0

没有解决方法。我不知道任何可以强制某个实例变量出现的东西。尝试使用属性作为替换。 –

3

你不能在@protocol中声明ivars,但你可以强制符合类实现一个存取器和一个增变器,这听起来像你正在得到的。例如:

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

@interface Carrot : NSObject <Priced> { 
    double price; 
} 
@end 
@implementation Carrot 
@synthesize price; 
@end 
+0

是啊我知道有方法A.K.A.行为。但是想到迫使程序员添加一个必须的变量。谢谢 – doNotCheckMyBlog

1

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

+0

+1,尽管子类(用户)类在Objective-C中似乎比(比如说)C++少得多,但“@ protocol”可能不是OP需要的正确工具。 – Ephemera

+0

我倾向于经常创建子类......我认为很多可可/ iOS程序员使用他们熟悉的工具,这是可以理解的...给出的比C++和Java已经在大学中与OOP一起教授〜 20年... –