ObjectProperties.h
@protocol ObjectProperties <NSObject>
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSDate *date;
@property (assign, nonatomic) int64_t index;
@end
КлассA.h
#import <Foundation/Foundation.h>
@protocol ObjectProperties;
@interface ClassA : NSObject <ObjectProperties>
- (void)specialSauce;
@end;
ManagedClassA.h
#import <CoreData/CoreData.h>
@protocol ObjectProperties;
@interface ManagedClassA : NSManagedObject <ObjectProperties>
- (void)doSomething;
@end;
В приведенном выше примере кода я определил протокол в файле.h, который будет использоваться как с объектами Core Data, так и с обычными ванильными объектами. Кажется, что "шум" состоит в том, что соответствующие классы #импортируют протокол в свой заголовок; было бы чище объявить протокол и импортировать его в файле реализации, как я показал выше. Однако Xcode выдает предупреждение, когда делает это таким образом :
Cannot find protocol definition for 'ObjectProperties'
. Код компилируется и в основном работает. Я говорю в основном потому, что Core Data пытается динамически создавать геттеры/сеттеры для скалярного свойства, но я думаю, что это, вероятно, потому, что я столкнулся с крайним случаем.
Конечно, самый очевидный обходной путь — просто импортировать заголовок протокола в заголовки классов.
Если мое понимание верно (и мои знания получены совсем недавно, и поэтому вполне возможно, что я ошибаюсь ), если я импортирую протокол в заголовки своего класса и вношу изменения в протокол, то все последующие файлы, которые импортируют мои классы, должны быть перекомпилированы.
Каков правильный способ решения этого типа проблемы?