我首先声明了一个协议,然后使用它。但是我收到警告“无法找到LeveyPopListViewDelegate的协议定义”。 这是代码:
@protocol LeveyPopListViewDelegate;
@interface LeveyPopListView : UIView <LeveyPopListViewDelegate,UITableViewDataSource, UITableViewDelegate,UITextFieldDelegate>
//the content of LeveyPopListView
@end
@protocol LeveyPopListViewDelegate <NSObject>
//the definition for LeveyPopListViewDelegate
@end
如果我首先放置LeveyPopListViewDelegate
定义,我就不能在协议中使用LeveyPopListView
。
答案 0 :(得分:6)
我最终压制了该特定线路的所有警告,这不是理想的但效果很好。
// Forward-declare protocols (to avoid circular inclusion)
@protocol YourProtocol;
#pragma clang diagnostic push
// To get rid of 'No protocol definition found' warnings which are not accurate
#pragma clang diagnostic ignored "-Weverything"
@interface YourClass: NSObject
// <YourProtocol>
#pragma clang diagnostic pop
确保你做推&amp; pop,否则你最终会被忽略这个文件的所有警告!
答案 1 :(得分:2)
如果你按照这篇文章中的好建议仍然有问题,试试干净吧。我在它上面搔了一会儿,干净的解决了这个问题。
答案 2 :(得分:1)
我总是这样做:
@class LeveyPopListView;
@protocol LeveyPopListViewDelegate <NSObject>
//the definition for LeveyPopListViewDelegate
@end
@interface LeveyPopListView : UIView <LeveyPopListViewDelegate,UITableViewDataSource, UITableViewDelegate,UITextFieldDelegate>
//the content of LeveyPopListView
@end
答案 3 :(得分:0)
您必须先定义协议。试试如下
@protocol LeveyPopListViewDelegate <NSObject>
//the definition for LeveyPopListViewDelegate
@end
@interface LeveyPopListView : UIView <LeveyPopListViewDelegate,UITableViewDataSource, UITableViewDelegate,UITextFieldDelegate>
//the content of LeveyPopListView
@end
答案 4 :(得分:0)
在协议定义中使用具体的类名称是不寻常的。你应该做什么(大多数情况下,异常可能适用......虽然它们是难闻的气味)是让你的类符合协议,并在委托协议定义中使用该类。
一个类需要成为自己的委托也是一种难闻的气味。我要仔细修改设计。
答案 5 :(得分:0)
当我将Swift
协议导入到Objective C
类时,这发生在我身上。帮助我的是将*-Swift.h
文件添加到Objective C
类文件中:
#import "MyApp-Swift.h"
并将协议声明为@objc
:
@objc protocol VerificationGate
答案 6 :(得分:0)
此外,如果您在其他文件中声明并定义了协议,则必须#import
该文件,在这种情况下,前向声明将无济于事。
顺便说一句。切勿像某些答案所示抑制警告。