【问题标题】:Using NSClassFromString() on a Swift declared class requires a fully qualified name在 Swift 声明的类上使用 NSClassFromString() 需要一个完全限定的名称
【发布时间】:2015-03-31 21:01:59
【问题描述】:

我有一个问题,在 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 已经有点身份危机了。我们只想检查表名,以及程序员将使用的类名。

提前感谢您的帮助。

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

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

    你必须把@objc(SwiftClassName)放在你的swift类上面。
    喜欢:

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

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

    感谢@klaus

    原帖可以在这里找到:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-17
      • 2015-02-23
      • 2023-03-24
      • 2011-10-02
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多