在Swift声明的类上使用NSClassFromString()需要一个完全限定的名称

时间:2015-03-31 21:02:00

标签: ios objective-c swift

我有一个问题,在Swift中我有一个名为Person的类,在与一些Objective-c代码交谈时,它会尝试创建该类的新实例。

显然 NSClassFromString(@" Person")失败,因为它需要是一个完全限定的名称,例如 DBAccess_Test.Person

我的问题是,我能编程生成 DBAccess_Test。部分,可能会搜索类的注册表吗?

原因是,对于我们维护的ORM,Swift程序员可能决定将所有存储类都放在应用程序的单独命名空间中。但是我们希望维护标准的表命名实践,这些实践与开发人员理解的类的名称相匹配。

例如,而不是查询:

NSArray* r = [[[[Person query] 
             where:@"surname IN (SELECT surname FROM Employees)"]
             orderBy:@"forename"]
             fetch];

它会变成:

NSArray* r = [[[[Person query] 
             where:@"surname IN (SELECT surname FROM DBAccess_Test_Employees)"]
             orderBy:@"forename"]
             fetch];

ORM已经有一点身份危机。我们只想检查表名,以及程序员将使用的类名。

先谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

令人讨厌的是,我发布这篇文章时偶然发现了答案(尽管搜索了几个小时)。

你必须把@objc(SwiftClassName)放在你的快速课程之上 喜欢:

@objc(SubClass)
class SubClass: SuperClass {...}

然后你所有的原始Objective-c代码都会看到这些类,而不是试图用它们做任何时髦的事情!

感谢@klaus

原帖可以在这里找到:

https://stackoverflow.com/a/24448786/846035