27

If I have a UIViewController subclass, how can I get the class name as string? I've tried doing [vc class], but this returns a Class object, not an NSString.

jscs
  • 63,095
  • 13
  • 148
  • 192
xonegirlz
  • 8,637
  • 18
  • 66
  • 127
  • possible duplicate of [How do I print the type or class of a variable in Swift?](http://stackoverflow.com/questions/24006165/how-do-i-print-the-type-or-class-of-a-variable-in-swift) – Jeehut Dec 18 '14 at 16:31

4 Answers4

49

NSStringFromClass

Returns the name of a class as a string.

NSString * NSStringFromClass (  
    Class aClass  
);
Community
  • 1
  • 1
jscs
  • 63,095
  • 13
  • 148
  • 192
  • If ending up here from google and actually want the SWIFT 3 answer, use eg: `String(describing: MyViewController.self)` : https://stackoverflow.com/a/34878224/1736679 – Efren May 29 '17 at 03:35
20

You can do something like this

NSString *strClass = NSStringFromClass([viewController class]);
Vaibhav Saran
  • 12,768
  • 3
  • 63
  • 74
Hardik Darji
  • 3,555
  • 1
  • 29
  • 30
4

Use the function:

const char * class_getName(Class cls)

as

class_getName ([vc class]);
GoZoner
  • 63,869
  • 20
  • 92
  • 144
  • how do I cast from char* to NSString? – xonegirlz Jun 04 '12 at 23:09
  • 1
    you don't cast from char* to NSString. You have to create a string from bytes using a call like initWithBytes:length:encoding:. You'd probably use use the encoding NSASCIIStringEncoding. See the other poster's message about NSStringFromClass. That's much easier to use than the Objective C runtime function class_getName(). – Duncan C Jun 05 '12 at 00:19
  • `class_getName()` is the runtime function that NSStringFromClass would use under the hood. – Ephemera Dec 18 '14 at 00:14
4

you can do some thing like the following when you instantiate your object:

[[NSClassFromString(@"className1") alloc] init];
shebelaw
  • 3,772
  • 6
  • 34
  • 48
  • 4
    xonegirlz asked how to get an NSString from a class, and your answer gets an instance of a class from an NSString (i.e. you gave the reverse of the answer). – Harpastum Mar 14 '13 at 16:45