类型参数不能应用于非类型类型'id'

时间:2017-12-26 09:58:54

标签: objective-c protocols xcode9.2

我是ObjectiveC的新手,并在Swift工作了几年。因此,我不明白Xcode中的以下解释错误:

  

类型参数不能应用于非类型类型“id”

我的协议:

@protocol ExampleProtocol<NSObject>
@required

-(NSString *)title;
-(NSString *)album;

@end

我在MyService.h文件中的实现:

@interface MyService : NSObject 
@property (nonatomic, assign, readwrite) id<ExampleProtocol> delegate;
@end

错误发生在以下行中:

> @property (nonatomic, assign, readwrite) id<ExampleProtocol> delegate;

此外:

  • 我已导入所需的文件.h,其中ExampleProtocol代码位于MyService.m文件中
  • 在我的MyService.h文件顶部添加了@class ExampleProtocol;

也尝试过:

  • 通过app-Bridging.h导入@objc: class创建一个Swift协议,给出了相同的错误消息结果。
  • 清理构建
  • 清理构建文件夹(删除派生数据)

    唯一可行的方法是将公共接口中的行删除到私有。这没有意义。我不想从另一个类设置委托,并创建一个设置私有委托的公共setter是一个丑陋的解决方法。

任何建议都会有所帮助。我想明白为什么会这样。在ObjectiveC中编写的项目中有很多其他协议可以正常工作。

1 个答案:

答案 0 :(得分:1)

ExampleProtocol是一个协议,而不是一个类。如果导入标题,则不需要它。如果您没有导入标题,则应为@protocol ExampleProtocol;