Я только что начал Swift и обычно в Objective-C создаю категорию для каждого из моих подклассов NSManagedObject, поэтому категория не стирается каждый раз, когда мне приходится генерировать мой подкласс. Более того, он может упростить создание объектов CoreData, особенно когда они заполняются данными, поступающими из JSON.эквивалент категории подкласса NSManagedObject в Swift?
Пример:
Мой NSManagedObject подкласс:
@class Book;
@interface Book : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * author;
@property (nonatomic, retain) NSString * plot;
@end
Его "помощник" Реализация категории:
+ (Book*)bookFromDictionary:(NSDictionary *)dictionary inContext:(NSManagedObjectContext *)context {
Book *book = nil;
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Book"];
request.predicate = [NSPredicate predicateWithFormat:@"name == %@", dictionary[@"name"]];
request.fetchLimit = 1;
NSError *error;
NSArray *result = [context executeFetchRequest:request error:&error];
if (!result || error) {
NSLog(@"Error getting Book : %@", error.localizedDescription);
} else if ([result count] == 0) {
book = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:context];
} else {
book = [result lastObject];
}
self.name = dictionary[@"name"];
self.author = dictionary[@"author"];
self.plot = dictionary[@"plot"];
return book;
}
Я пытаюсь воспроизвести эту концепцию в Swift, но я не Не знаю, как это сделать. Кажется, что расширения заменяют категории в Swift, но если я реализую расширение в подкласс NSManagedObject в Swift, он будет стираться каждый раз, когда мне нужно создать подкласс NSManagedObject (потому что он находится в том же файле ...). Вот почему я использовал категории в Obj-C.
Может ли кто-нибудь сказать мне, что такое хорошие практики в Swift?
Я был бы очень признателен за любую помощь!
Категории - это правильный способ сделать это в ObjC (очевидно, после того, как вы были укушены, но почему не генерируется код шаблона Xcode, который не включает комментарии к этому эффекту?) В Swift я использую расширения. – Grimxn