0

我是 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和导入的 Swift 协议给了我相同的结果和相同的错误消息。: class

  • 干净的构建

  • 清理构建文件夹(删除派生数据)

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

任何建议都会有所帮助。我想了解为什么会发生这种情况。我的项目中有很多其他的协议是用 ObjectiveC 编写的,它们都可以正常工作。

4

1 回答 1

2

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

于 2017-12-27T22:32:58.260 回答