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?

—Jens
 _______________________________________________
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