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,694
  • 13
  • 151
  • 195
xonegirlz
  • 8,889
  • 19
  • 69
  • 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,694
  • 13
  • 151
  • 195
  • 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,848
  • 3
  • 65
  • 75
Hardik Darji
  • 3,633
  • 1
  • 30
  • 30
4

Use the function:

const char * class_getName(Class cls)

as

class_getName ([vc class]);
GoZoner
  • 67,920
  • 20
  • 95
  • 145
  • 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,992
  • 6
  • 35
  • 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