Reputation: 8357
I have the following problem: I get an instance of a class passed and want to know the name of the class of this instance. How to get this?
Upvotes: 152
Views: 74844
Reputation: 14338
NSString* classNameNSStr = [someObjcInstance className]
NSString* classNameNSStr = NSStringFromClass(someObjcClass)
const char* className = object_getClassName(someObjcClass)
--> related:
isKindOfClass
:
BOOL isSameClass = [someObjcInstance isKindOfClass: SomeClass];
SomeClass
can get from: objc_getClass("SomeClassName")
Upvotes: 0
Reputation: 16190
OBJC:
NSStringFromClass([instance class])
SWIFT
From instance:
String(describing: YourType.self)
From type:
String(describing: self)
Upvotes: 5
Reputation: 91
Just add a category:
NSObject+Extensions.h
- (NSString *)className;
NSObject+Extensions.m
- (NSString *)className {
return NSStringFromClass(self.class);
}
Then use the following code:
NSString *className = [[SomeObject new] className];
or even:
NSString *className = SomeObject.new.className;
To use it anywhere add the category to YourProject.pch file.
Upvotes: 2
Reputation: 3813
If you are looking how get classname in Swift you can use reflect to get information about object.
let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
println(typeName)
}
Upvotes: 1
Reputation: 14864
From within the class itself
-(NSString *) className
{
return NSStringFromClass([self class]);
}
Upvotes: 17
Reputation: 49394
if all you want to do is test an object to see if it's a type of a certain Class
BOOL test = [self isKindOfClass:[SomeClass class]];
Upvotes: 31