首页 > 解决方案 > 如何在 Swift 中使用这个 fetchRequest()?

问题描述

我是新手swift。我正在尝试创建一个核心数据NSManagedObject类,就像我以前在Objective-C.

在Objective-C中,我会创建类似的东西

+ (Countries *)countryWithName:(NSString *)name
 inManagedObjectContext:(NSManagedObjectContext *)context {

  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  request.entity = [NSEntityDescription entityForName:NSStringFromClass([self class])
                               inManagedObjectContext:context];


  NSPredicate *predicate = [NSPredicate predicateWithFormat:
                            @"(country == %@)", name];

  request.predicate = predicate;

  return [[context executeFetchRequest:request error:nil] lastObject];
}

所以,任何时候我想在核心数据上按名称获取一个国家,我都会这样做

userCountry = [Countries countryWithName:@"United States" inManagedObjectContext:self.managedObjectContext];

但是在NSManagedObject使用 swift 创建一个类之后,我看到 Xcode 在里面创建了这个代码Countries+CoreDataProperties.swift

@nonobjc public class func fetchRequest() -> NSFetchRequest<Countries> {
    return NSFetchRequest<Countries>(entityName: "Countries")
}

@NSManaged public var number: Int16
@NSManaged public var name: String?
@NSManaged public var shortcut: NSData?

现在我想创建我的类countryByName函数。第一行应该有

let fetchRequest = NSFetchRequest(entityName: "Countries") 

fetchRequest()已经创建。

我该如何使用它?

它不会让我使用

let request = Countries.fetchRequest()

给我一个错误Ambiguous use of fetchRequest)=

标签: swiftcore-datansmanagedobject

解决方案


获取请求是通用的,因此您必须指定类型,如下所示:

let request: NSFetchRequest<Countries> = Countries.fetchRequest()

推荐阅读