2016-06-29 3 views
1

요청을 가져 오기 위해 키 경로 사전을 사용하는 개체가 있습니다. 각 인출 요청은 다른 엔티티를 나타냅니다. 이것은 Swift 2.3 이하에서 모두 훌륭하게 작동합니다. 그러나 프로젝트를 Swift 3으로 변환하려고 시도하면 가져 오기 요청에 대한 새로운 제네릭 문제가 발생합니다. 가져 오기 요청은 연결된 형식을 갖는 경향이 있지만 사전에는 모든 종류의 형식을 반환하는 가져 오기 요청이 필요합니다. NSFetchRequest<Message> 유형의 가져 오기 요청과 함께 [String:NSFetchRequest<NSManagedObject>] 또는 [String:NSFetchRequest<NSFetchRequestResult>] 유형의 사전을 만들려고합니다. 나는 컴파일러 오류 수 (Message는 NSManagedObject 서브 클래스 인) :Swift에서 NSFetchRequests 컬렉션 3

Cannot convert value of type 'NSFetchRequest< Message >' to expected dictionary

값 유형을 'NSFetchRequest'내가 하나가 더 일반적인 가져 오기 요청 유형에 요청을 가져올 다운 캐스트 어떻게

?

+1

사전 항목을 'AnyObject'로 선언하거나 'NSDictionary'를 사용하십시오. –

+0

여기서''Swift2'' 코드를 공유하여''Swift3''로 변환 할 수 있겠습니까? –

+0

좀 더 일반적인 사전을 사용하면 효과적입니다 ([String : NSPersistentStoreRequest]도 작동합니다) 사전에서 읽을 때 캐스트가 필요합니다. 그러나 그것은 저를 생각하게 만들었습니다. NSFetchRequest의 한 유형을 다른 유형으로 캐스팅 할 수 있습니까? 할 수있어! 'fetchRequestA as! NSFetchRequest '는 작동합니다. 그것은 꽤 clunky하지만 작동합니다. –

답변

0

분명히 한 요청 유형을 다른 것으로 가져올 수 있습니다. 그것은 다소 clunky하다. 나는 캐스트가 실패 할 상황이 있다고 상상할 수 없다. ObjC에서는 캐스트가 필요하지 않습니다.

class A: NSManagedObject {} 
class B: NSManagedObject {} 

let fetchRequestA = NSFetchRequest<A>() 
let fetchRequestB = NSFetchRequest<B>() 

let fetchRequests: [String:NSFetchRequest<NSManagedObject>] = [ 
    "a" : fetchRequestA as! NSFetchRequest<NSManagedObject>, 
    "b" : fetchRequestB as! NSFetchRequest<NSManagedObject>, 
] 
관련 문제