我的项目中声明了两个协议。我写的第一个名字是SSSelectingCategory.h
#import <Foundation/Foundation.h>
@protocol SSSelectingCategory <NSObject>
@required
@property (nonatomic, strong) SSCategory *selectedCategory;
@end
第二个是SSSelectingIcon.h
#import <Foundation/Foundation.h>
@protocol SSSelectingIcon <NSObject>
@required
@property (nonatomic, strong) SSIcon *selectedIcon;
@end
奇怪的是,第一个协议编译时没有任何错误或警告,而第二个协议正在抛出Unknown type name 'SSIcon'
.
我知道这个问题的答案是在我的第二个协议中使用前向类声明,如下所示:
#import <Foundation/Foundation.h>
@class SSIcon;
@protocol SSSelectingIcon <NSObject>
@required
@property (nonatomic, strong) SSIcon *selectedIcon;
@end
但是现在这让我认为SSSelectingCategory.h
协议根本不应该首先编译,因为我没有放置任何显式#import
或任何类型的前向类声明。
我可以让编译器安静下来并继续编码,但我想了解 Xcode 是否发生了一些奇怪的事情,或者我是否遗漏了一些细节,因为这两种协议都非常简单。SSCategory
和/或类是否存在问题SSIcon
,因为它们都是NSManagedObject
s 并且两者之间存在联系?