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

tjg*_*184 1 xcode objective-c

@protocol Runnable

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

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

@end
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*tto 5

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

id<Runnable>是你说"符合对象的惯用方式Runnable.一种id是引用任何类型的对象,和< >符号表达一个明确的一致性进行类型检查的目的,给定的协议.

如果你说Foo *,你指的是任何一种类型的对象Foo或其子类之一.

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