在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!