Dan*_*sko 10 objective-c ios swift xcode6
我知道这个问题,关于我们如何能够得到斯威夫特的Objective-C类的可读类名.
我想要实现的是从objective-c内部获取Swift类的可读类名,而不使用模块修改类名.
所以,如果我有一个Swift类:
class Foo: NSObject{}
Run Code Online (Sandbox Code Playgroud)
然后在Objective-C中,我很乐意使用方便的NSStringFromClass将类名转换为字符串.
我希望NSStringFromClass([Foo class])返回,@"Foo"但它返回@"Bar.Foo"与Bar模块名称.
我遇到了这个要点,但它看起来有点乱和乱,是否有更好的方法?不包括手动将类名称键入字符串的内容将是首选.
ull*_*trm 30
只需@objc(YourClassName)加入你的快速课程:
@objc(YourClassName)
class YourClassName: NSObject {
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用NSStringFromClass:
NSStringFromClass(YourClassName.self)
Run Code Online (Sandbox Code Playgroud)
它也应该来自Objective-C.
使用Swift 2.1对此答案的评论表明这已足够:
class YourClassName: NSObject {
}
Run Code Online (Sandbox Code Playgroud)
并且只需使用:
var str = String(YourClassName)
Run Code Online (Sandbox Code Playgroud)
我自己没有用Objective-C代码测试过这个.
有一个编辑建议想要使用它代替Swift 4:
var str = String(describing: YourClassName.self)
Run Code Online (Sandbox Code Playgroud)
我没有从Objective-C测试过这个.
你得到的原因"Bar.Foo"是因为swift是命名空间语言.我假设您运行的应用程序名为Bar.因此,您可以使用以下方法获取您的班级名称:
let nameSpaceClassName = NSStringFromClass(Foo)
let className = nameSpaceClassName.componentsSeparatedByString(".").last! as String
Run Code Online (Sandbox Code Playgroud)
在objective-c中你最好的选择是:
NSString *yourCellName = NSStringFromClass([yourCell class]).pathExtension;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12864 次 |
| 最近记录: |