ios - NSManagedObject 子类的类别在 Swift 中是否等效?

标签 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 中这方面的最佳实践是什么?

如果有任何帮助,我将不胜感激!

最佳答案

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

关于ios - NSManagedObject 子类的类别在 Swift 中是否等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30397028/

相关文章:

ios - 为什么使用 viewWithTag 高效?

ios - 在 UiTableViewCell 上设置时,DisclosureButton Indicator 或 Any kind of Accessory Type 似乎没有出现

iphone - 退出后11秒内恢复应用时崩溃(0)

ios - 搜索无法快速进行

iphone - 编辑后将实体保存在核心数据中

cocoa - 核心数据和线程

ios - 拍照并存储在 Xamarin.iOS 中的自定义相册中

ios - 运行一个循环直到 UIPanGestureRecognizer 结束

swift - 初始化变量时如何防止重复代码?

objective-c - 如何在 iPhone 上制作 "iPod Wheel"类型的控件?