【发布时间】:2015-05-22 12:42:00
【问题描述】:
我刚开始使用 Swift,通常在 Objective-C 中我为我的每个 NSManagedObject 子类创建一个类别,因此每次我必须生成我的子类时该类别都不会被删除。此外,它还可以简化 CoreData 对象的创建,尤其是在填充来自 JSON 的数据时。
示例:
我的 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 中的类别,但是如果我在 Swift 中将扩展实现到 NSManagedObject 子类中,那么每次我必须生成我的 NSManagedObject 子类时它都会被删除(因为它在同一个文件中......)。这就是我过去在 Obj-C 中创建类别的原因。
谁能告诉我在 Swift 中有哪些好的做法?
我将非常感谢任何帮助!
【问题讨论】:
-
Categories 是在 ObjC 中执行此操作的正确方法(很明显,一旦你被咬了,但为什么 Xcode 产生的样板不包含这种效果的 cmets?)在 Swift 中,我使用扩展名。