Works like a charm, thanks.

> On 7 Oct 2017, at 2:56 PM, Slava Pestov <spes...@apple.com> wrote:
> 
> You can try upcasting the value to NSObject first, and then performing a 
> conditional downcast to Controller1 and Controller2. At this point the type 
> checker will not have enough information to decide that the cast always 
> fails, and should no longer emit a warning.
> 
> Slava
> 
>> On Oct 6, 2017, at 11:55 PM, Glen Huang <hey...@gmail.com 
>> <mailto:hey...@gmail.com>> wrote:
>> 
>> Done, https://bugs.swift.org/browse/SR-6083 
>> <https://bugs.swift.org/browse/SR-6083>
>> 
>> In the mean time, is there any workaround? Or it’s not possible to check the 
>> concrete type without this issue being fixed?
>> 
>>> On 7 Oct 2017, at 2:44 PM, Slava Pestov <spes...@apple.com 
>>> <mailto:spes...@apple.com>> wrote:
>>> 
>>> Oh I see. I think the problem is that with Objective-C generics, you can 
>>> always cast from Foo<A> to Foo<B>, because the type parameters do not 
>>> really exist. Swift’s type checking logic for casts assumes Swift generic 
>>> semantics, where in general Foo<A> and Foo<B> are unrelated types.
>>> 
>>> Do you mind filing a bug?
>>> 
>>> Slava
>>> 
>>>> On Oct 6, 2017, at 11:40 PM, Glen Huang <hey...@gmail.com 
>>>> <mailto:hey...@gmail.com>> wrote:
>>>> 
>>>> NSFetchedResultsController is the class from Core Data: 
>>>> 
>>>> https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller
>>>>  
>>>> <https://developer.apple.com/documentation/coredata/nsfetchedresultscontroller>
>>>> 
>>>>> On 7 Oct 2017, at 2:38 PM, Slava Pestov <spes...@apple.com 
>>>>> <mailto:spes...@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@swift.org <mailto:swift-users@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@swift.org <mailto:swift-users@swift.org>
>>>>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>>> 
>>>> 
>>> 
>> 
> 

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to