> On Jun 19, 2015, at 3:20 PM, Jens Alfke <[email protected]> wrote:
> 
> The Obj-C runtime type info for property types appears to omit the module 
> names of Swift classes. For instance, if there's a Swift class “Foo” 
> (inheriting from NSObject) in module “MyApp”; and some class has a property 
> whose type is Foo*, then according to the runtime the property's type is 
> “Foo”, not “MyApp.Foo”.
> 
> More specifically, the string returned by property_getAttributes( ) is 
> something like:
>       T@"Foo",N,D,&
> when it should be
>       T@"MyApp.Foo",N,D,&
> 
> This breaks code of mine that looks up the property’s class based on the 
> class name parsed from the above — when it calls objc_getClass(“Foo”) it gets 
> NULL.
> 
> I’m working around this by looking at the name of the class that contains the 
> property, checking if it includes a module (a prefix delimited by “.”), and 
> if so prepending that module name to the property’s class; if this fails then 
> I fall back to looking up the class in the global namespace.
> 
> This works, but it’s kind of a kludge. It can do the wrong thing if a module 
> contains a class with the same base name as one in the global namespace, and 
> it’ll also fail if a class in one module has a property whose type is a class 
> from a different module. However, I can’t see a proper fix for this since the 
> module information does not seem to be available through the runtime API.
> 
> Is there a way to get the full class name, or should I file a Radar?


It’s covered by rdar://problem/21368142 <rdar://problem/21368142>.

        - Doug

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Objc-language mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/objc-language/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to