[swift-users] How to check the type of a concrete class that inherits from a generic class?

Glen Huang heyhgl at gmail.com
Sat Oct 7 01:40:13 CDT 2017


NSFetchedResultsController is the class from Core Data: 

https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller

> On 7 Oct 2017, at 2:38 PM, Slava Pestov <spestov at apple.com> wrote:
> 
> Can you post a self-contained example, including the declaration of NSFetchedResultsController?
> 
> Slava
> 
>> On Oct 6, 2017, at 11:28 PM, Glen Huang via swift-users <swift-users at swift.org> wrote:
>> 
>> Hi,
>> 
>> I defined some concrete classes inheriting from a generic class like this:
>> 
>> class Controller1: NSFetchedResultsController<NSManagedObject> {}
>> class Controller2: NSFetchedResultsController<NSManagedObject> {}
>> 
>> And I assign them a shared delegate, and in the delegate method:
>> 
>> func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>)
>> 
>> I want to test the concrete type of controller, doing things differently for Controller1 and Controller2.
>> 
>> But doing the following gives me a warning: Cast from 'NSFetchedResultsController<NSFetchRequestResult>' to unrelated type 'Controller1’ always fails
>> 
>> switch controller {
>> case is Controller1:
>>       // ...
>> default:
>>       break
>> }
>> 
>> I wonder what’s the correct way to check the concrete type?
>> 
>> Regards,
>> Glen
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
> 



More information about the swift-users mailing list