good point - type safety would prevent it from compiling. also, the controllers are subclasses of NSFetchedResultsController<NSManagedObject>
but the delegate method takes a different type: NSFetchedResultsController<NSFetchRequestResult> NSManagedObject != NSFetchRequestResult -- C. Keith Ray Senior Software Engineer / Trainer / Agile Coach * http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf > On Oct 7, 2017, at 10:32 PM, Glen Huang <hey...@gmail.com> wrote: > > I need to do things differently in the shared delegate based on the > controller type, so this probably won’t work. But thanks, I believe it will > come in handy when I do need to branch on controllers themselves. > > I do have a question though, since the method is a callback, and its > signature is changed (with "Thing &” added), will NSFetchedResultsController > be able to find it and call it? > >> On 8 Oct 2017, at 12:14 AM, C. Keith Ray <keith...@mac.com >> <mailto:keith...@mac.com>> wrote: >> >> Or make a base class for both Controller classes which defines todo () and >> override todo() in each Controller class. >> >> -- >> C. Keith Ray >> >> * https://leanpub.com/wepntk <https://leanpub.com/wepntk> <- buy my book? >> * http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf >> <http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf> >> * http://agilesolutionspace.blogspot.com/ >> <http://agilesolutionspace.blogspot.com/> >> >> On Oct 7, 2017, at 9:12 AM, C. Keith Ray <keith...@mac.com >> <mailto:keith...@mac.com>> wrote: >> >>> You should be able to do this to avoid casting.(I think) >>> >>> protocol Thing { >>> func todo() >>> } >>> >>> class Controller1: NSFetchedResultsController<NSManagedObject>, Thing { >>> func todo () {doOneThing} >>> } >>> class Controller2: NSFetchedResultsController<NSManagedObject>, Thing { >>> func todo () {doAnotherThing} >>> } >>> >>> func controllerWillChangeContent(_ controller: Thing & >>> NSFetchedResultsController<NSFetchRequestResult>) { >>> controller.todo() >>> ... >>> } >>> >>> -- >>> C. Keith Ray >>> >>> * https://leanpub.com/wepntk <https://leanpub.com/wepntk> <- buy my book? >>> * http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf >>> <http://www.thirdfoundationsw.com/keith_ray_resume_2014_long.pdf> >>> * http://agilesolutionspace.blogspot.com/ >>> <http://agilesolutionspace.blogspot.com/> >>> >>> 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 >>>> <https://lists.swift.org/mailman/listinfo/swift-users> >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users