swift镜像返回类函数中的类名

时间:2016-07-12 13:02:07

标签: ios swift2

我有一个类函数,在该类函数中,我想要扩展这个抽象实体类的类的名称。

我发现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时......你知道你想要一辆车。

1 个答案:

答案 0 :(得分:0)

我真的没有得到您的问题,但根据我的要求,您需要以下功能。

class AbstractEntity {


    class func findOrCreateEntity() {
        let str = __FILE__
        let fullNameArr = str.componentsSeparatedByString("/")
        print("Name: \(fullNameArr.last!)")


    }
}