当我返回指向协议的指针时,为什么会出现编译错误?

时间:2010-08-11 23:40:21

标签: objective-c xcode

@protocol Runnable

- (id<Runnable>) works; //this compiles fine

- (Runnable *) broke; // get a compile error saying Expected ')' before 'Runnable'

@end

我不确定我理解为什么xCode抱怨- (Runnable *) broke;

1 个答案:

答案 0 :(得分:5)

Obj-C中的协议在语法上看起来不像Java中的“接口”,其中接口指针和子类指针的语法基本相同。

id<Runnable>是您说“符合Runnable的对象的惯用方式。id是对任何类型对象的引用,并且< >表示法表达了对给定协议的明确一致性,以进行类型检查。

如果你说Foo *,你指的是Foo类型或其子类之一的对象。

这恰好是Obj-C的语法。使用这种语法,语义类似于你所获得的语义,例如Java的。