我有一个类函数,在该类函数中,我想要扩展这个抽象实体类的类的名称。
我发现Mirror类型可以这样做,所以我有这样的事情:
class AbstractEntity: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
class func findOrCreateEntityWithUUID(entityName: String, uuid: String, context: NSManagedObjectContext) -> AnyObject? {
let request = NSFetchRequest(entityName: entityName)
request.returnsObjectsAsFaults = false;
let predicate = NSPredicate(format: "uuid = %@", uuid)
request.predicate = predicate
do {
var results = try context.executeFetchRequest(request)
if results.count > 0 {
return results[0]
} else {
let entity = NSEntityDescription.entityForName(entityName, inManagedObjectContext: context)
let abstractEntity = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: context)
abstractEntity.setValue(uuid, forKey: "uuid")
return abstractEntity
}
} catch let error as NSError {
DDLogError("Fetch failed: \(error.localizedDescription)")
}
return nil
}
}
唯一的问题是,例如Car类扩展了这个AbstractEntity,它调用了打印Car.Type的方法,这是正确的,但我不想要.Type扩展名。有没有办法获得班级名称?
如果可能的话,我真的想以迅捷的方式去做。我知道NSObject的意思,然后是NSStringFromClass的东西..
为清楚起见:
{{1}}
这是我的AbstractEntity,我模型中的每个实体都扩展了它。所以我有一个地方,我想要我的逻辑。
现在举个例子我有一个Car实体,我想做Car.find ......然后它给我一辆车。这就是为什么我(想)我需要类名,以便我可以使用它来获取它与NSFetchRequest(entityName:entityName)。我现在传递我想要获取的entityName,但我觉得这很难看,因为当你做Car.find时......你知道你想要一辆车。
答案 0 :(得分:0)
我真的没有得到您的问题,但根据我的要求,您需要以下功能。
class AbstractEntity {
class func findOrCreateEntity() {
let str = __FILE__
let fullNameArr = str.componentsSeparatedByString("/")
print("Name: \(fullNameArr.last!)")
}
}