gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 13:13:16 24 4
gpt4 key购买 nike

我刚开始使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com