Ios NSManagedObject子类';Swift中的等效类别?
我刚开始使用Swift,通常在Objective-C中,我会为我的每个NSManagedObject子类创建一个类别,这样在每次生成子类时该类别不会被删除。此外,它还可以简化CoreData对象的创建,特别是当由来自JSON的数据填充时 示例: 我的NSManagedObject子类:Ios NSManagedObject子类';Swift中的等效类别?,ios,swift,core-data,Ios,Swift,Core Data,我刚开始使用Swift,通常在Objective-C中,我会为我的每个NSManagedObject子类创建一个类别,这样在每次生成子类时该类别不会被删除。此外,它还可以简化CoreData对象的创建,特别是当由来自JSON的数据填充时 示例: 我的NSManagedObject子类: @class Book; @interface Book : NSManagedObject @property (nonatomic, retain) NSString * name; @property
@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中重新创建。在swift中为
NSManagedObjects
生成子类时出现问题。通常,您必须再次手动检查它们,例如,将类型更改为选项,包括@objc(Class)
等标记
因此,我改变了我的工作流程:我现在在生成的文件中包括自定义方法,而不使用扩展名
,
(这是一个类别的Swift等价物)。更新托管对象模型时,我只需通过添加、重命名、更改等方式略微更改文件的属性和关系。类别是在ObjC中执行此操作的正确方法(很明显,一旦您被咬了,但为什么样板Xcode不生成不包含此效果的注释?),我使用扩展。现在我不建议让Xcode创建子类。在nillable属性方面遇到一些问题。不让Xcode创建子类,是不是意味着根本不使用数据模型文件?或者我必须以编程方式维护NSManagedObject子类,同时维护一个等效的数据模型文件吗?另一个问题(我不能再编辑了…)。mogenerator是否是解决此类问题的一个好选择(仍在Swift中)?