从实例获取类的名称


Answers:


396

NSStringFromClass([instance class]) 应该可以。


33
为回答问题而提出的建议,以便Google员工可以获得答案,而不用预料到需要。
Gleno

2
记住要#import <objc/objc-runtime.h>能够在实例上调用类。
JP Illanes 2015年

28

如果您要做的只是测试一个对象,以查看它是否是某个特定类的类型

BOOL test = [self isKindOfClass:[SomeClass class]];

18

从班级内部

-(NSString *) className
{
    return NSStringFromClass([self class]);
}

2
绝对不想引起您的愤怒,但这是您个人资料中与iOS有关的第二个答案。在我看来,仅补充一点就是我们可以在实例的实现中将实例称为“自身”。您会以此为辩护,因为它是对已有三年历史的答案的实质性补充吗?
丹,2014年

@danh,我看到你在追捕我。对你有好处!
Katedral Pillon

抱歉,我只是单击了此按钮,然后就是否要说什么进行了辩论。只是想做些柔和的罗纹,但我知道在这些半不露面的环境中,脾气会很快变热。感谢您对此善待。(实际上,+ 1用于练习封装)。
丹,2014年

2
除了麻烦之外,这无助于解决。
Nikolai Ruhe 2015年

1
应该将其作为一种分类方法
Bhumit Muchhadia '17

2

只需添加一个类别:

NSObject+Extensions.h
- (NSString *)className;

NSObject+Extensions.m
- (NSString *)className {
    return NSStringFromClass(self.class);
}

然后使用以下代码:

NSString *className = [[SomeObject new] className];

甚至:

NSString *className = SomeObject.new.className;

要在任何地方使用它,请将类别添加到YourProject.pch文件中。


如果在Swift类上调用,则返回一个命名空间的类名。
Alper



0

如果您正在寻找如何在Swift中获取类名,则可以使用反射来获取有关对象的信息。

let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
    println(typeName)
}

或只是self.dynamicType
jbg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.