在Objective-C的Swift类中调用NSStringFromClass将返回模块名称

我知道这个问题,关于如何在Swift中获得一个可读的class-name类。

我想要实现的是从内部的Objective-C中获取Swift类的可读类名,而不需要使用模块来修改类名。

所以如果我有一个Swift类:

class Foo: NSObject{} 

然后在Objective-C中,我很乐意使用方便的NSStringFromClass将类名转换为string。

我期望NSStringFromClass([Foo class])返回@"Foo" ,而是返回@"Bar.Foo"Bar是模块名称。

我碰到了这个Gist,但看起来有点乱七八糟,有没有更好的办法? 一些不包括手动input类名的string将是首选。

SWIFT 2.1之前:

只要把@objc(YourClassName)放到你的swift类中:

 @objc(YourClassName) class YourClassName: NSObject { } 

你可以像这样使用NSStringFromClass:

 NSStringFromClass(YourClassName.self) 

那么它也应该从Objective-C开始工作。


SWIFT 2.1

在Swift 2.1中,对这个答案的评论指出这足够了:

 class YourClassName: NSObject { } 

只要使用:

 var str = String(YourClassName) 

我自己虽然没有从Objective-C代码中testing过。

你得到"Bar.Foo"的原因是因为swift是一个命名空间语言。 我假设你正在运行这个应用程序被命名为酒吧。 因此,您可以使用以下命令获取您的课程名称:

 let nameSpaceClassName = NSStringFromClass(Foo) let className = nameSpaceClassName.componentsSeparatedByString(".").last! as String 

在Swift 2.1中的工作解决scheme是

 String(MyClass) 

试试Swift 2.0:

 self.description().componentsSeparatedByString(".").last!