NSManagedObject子类在Swift中的等效类别?

时间:2015-05-22 12:42:00

标签: ios swift core-data

我刚刚开始使用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中有什么好的做法吗?

我非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

Swift扩展是为NSManagedObject子类定义其他方法的正确方法。 您可以将扩展名放入单独的文件中 (例如" BookExtensions.swift")这样它们就不会被覆盖了 " Book.swift"在Xcode中重新创建。

答案 1 :(得分:0)

在Swift中为NSManagedObjects生成子类时存在问题。通常,您必须再次手动查看它们,例如将类型更改为选项,包括@objc(Class)等标记。

因此,我已经更改了我的工作流程:现在我在生成的文件中包含自定义方法,而不使用使用extension(这是Swift等效的类别)。更新我的托管对象模型时,我只是通过添加,重命名,更改等属性和关系来稍微更改文件。