[swift-users] NSDictionary passed through Swift loses access to category methods

Russell Finn rsfinn at gmail.com
Tue May 23 15:10:49 CDT 2017


I'm having an issue with an NSDictionary that is passing through Swift code
and back to Objective-C losing access to a method implemented by a category
on NSDictionary. There is clearly some subtlety about bridged dictionaries
that I'm missing, and I'd appreciate any clarification that the list can
provide.


Specifically: I have a Swift 3 application that uses some legacy
Objective-C classes.  One of these classes relies on a category on
NSDictionary that implements a method called `-boolValueForKey:`.


In the main application, the Swift code calls a method on a remote object
proxy that returns an NSDictionary, which get bridged back to a Swift
dictionary (`[AnyHashable: Any]`).  This bridged dictionary is passed to a
method on the legacy Objective-C class that calls the `-boolValueForKey:`
method from the category.  At this point, a runtime exception occurs that
says the dictionary object (which at this point is a
`_SwiftDeferredNSDictionary`, according to the debugger) doesn’t recognize
the selector `-boolValueForKey:`.


I can work around the issue in my code by modifying the legacy Objective-C
class and inlining the implementation of `-boolValueForKey:` — but is there
a better general approach?

Thanks — Russell
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170523/49ba1646/attachment.html>


More information about the swift-users mailing list