Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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
如何在Objective-C中定义具有属性的协议?_Objective C - Fatal编程技术网

如何在Objective-C中定义具有属性的协议?

如何在Objective-C中定义具有属性的协议?,objective-c,Objective C,我试图强制协议的所有实现者实现只读属性。这是我的尝试: @protocol Foo @property(readonly) BOOL isPending; @end @interface Bar <Foo> @end @implementation Bar - (BOOL) isPending { return NO; } @end @protocolfoo @属性(只读)BOOL显示; @结束 @接口条 @结束 @实现栏 -(BOOL)isPending{ 返回否;

我试图强制协议的所有实现者实现只读属性。这是我的尝试:

@protocol Foo
@property(readonly) BOOL isPending;
@end

@interface Bar <Foo>
@end

@implementation Bar
- (BOOL) isPending {
    return NO;
}
@end
@protocolfoo
@属性(只读)BOOL显示;
@结束
@接口条
@结束
@实现栏
-(BOOL)isPending{
返回否;
}
@结束
为什么协议文件中会出现警告

属性“isPending”要求定义方法“isPending”


这是一个协议!协议不应该实现这些功能!实现协议的类应该实现函数,这正是我所做的

我无法重现您在Xcode 4.3.2下报告的问题。您是否可能声明了要实现
Foo
的内容,但忽略了为
isPending
添加getter?诊断方法可能是将
-(BOOL)isPending
添加到协议中以代替
@属性
,并查看是否有任何差异。即使使用完全声明的getter和setter,您仍然可以使用点语法,因此它不会对程序的任何其他部分造成语法上的差异。

+1
您是否可能声明了实现Foo的内容,但忽略了为isPending向其添加getter
@Paul。警告发生在协议中,而不是Foo。Foo确实有一个用于isPending的getter