2016-07-12 2 views
0

클래스 함수가 ​​있는데이 클래스 함수에서이 추상 엔티티 클래스를 확장하는 클래스의 이름을 원합니다. ,클래스 함수의 클래스 반환 클래스 이름

class AbstractEntity { 

    class func findOrCreateEntity() -> AnyObject? { 
     print("Name: \(NSStringFromClass(Mirror(reflecting: self)))") 
    } 
} 

유일한 문제는, 예를 들어 클래스 차량이 AbstractEntity를 확장한다는 것입니다 그것은이 Car.Type를 인쇄하는 방법을 호출

나는 미러 타입 그래서 나는 이런 식으로 뭔가를이 작업을 수행 할 수있는 발견 이것은 정확하지만 .Type 확장자는 원하지 않습니다. 클래스 이름을 얻는 방법이 있습니까?

가능한 경우 신속하게 처리하고 싶습니다. 나는 명확성을 위해

.. NSObject의의 exnteions 다음 NSStringFromClass 일을 알고 : 내 AbstractEntity 내 모델에서 모든 엔티티의

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 엔티티가 있고 Car.find를하고 싶습니다 ... 그리고 나에게 자동차를 돌려줍니다. 그래서 (NSFetchRequest (entityName : entityName)) NSFetchRequest를 사용하여 클래스 이름을 가져올 수 있도록 클래스 이름이 필요하다. 이제 entityName을 전달합니다. 가져오고 싶지만 자동차를 할 때 추한 것 같아요. 알아보십시오. 차를 원한다는 것을 알고 있습니다.

+0

이 기능을 일반화하면 T.self를 사용할 수 없습니까? – jjatie

+0

각 클래스가 원하는 형식으로 고유 한 이름을 반환 할 수없는 이유는 무엇입니까? – Droppy

+0

핵심 데이터 유형에 대한 함수입니다. 그래서 AbstractEntity를 가지고 있으며, 클래스를 확장하는 다른 모든 것을 찾아서 생성하기위한 로직을 묶고 싶습니다. 그래서 나는 T를 사용할 수 있다고 생각하지 않습니까? 도적질 어떻게 지내니? Car.findOrCreateEntity를 수행하고 AbstractEntity에서 핵심 데이터에서 Car 엔티티를 가져와야하므로 Car라는 이름이 필요합니다. – user1007522

답변

0

정말로 질문이 없지만 제 요구 사항에 따라 다음과 같은 기능이 필요합니다.

class AbstractEntity { 


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


    } 
} 
+0

고마워요. 제 질문을 AbstractEntity 클래스의 예제 코드로 업데이트했습니다. 이유를 설명하고 싶습니다. 나는 지금 Car.find .. ("car", ..) 나는 그 "car"var을 제거하기를 원한다. – user1007522

관련 문제