无法在Swift 4中使用NSClassFromString工作

问题描述:

我需要从它的类名实例化一个类。我在Swift 3中可以正常工作,但在转换为Swift 4之后,我无法再继续工作了。我曾尝试使用NSClassFromString(_:)"MyApp.MyClass""_TtC5MyApp7MyClass"但没有成功。而且我也尝试使用Bundle.main.classNamed(_:)函数。我甚至在MyClass的类声明上面添加了@objc(MyBaseClass)以将其公开到Objective-C。 MyClass派生自MyBaseClass无法在Swift 4中使用NSClassFromString工作

我不明白为什么这不起作用,请帮忙。提前致谢!

+3

请向我们展示一个[mcve]。 – Hamish

+4

“我需要从它的类名实例化一个类”这是一种难闻的气味。你能展示你的用例吗?也许有更好的方法。 – matt

+0

我的应用程序从一个plist中读取了几个餐厅,这些餐馆都有一个id特性以及一些其他信息,例如,营业时间。这个id引用了一个从Restaurant类派生的具有相同名称的类。这些类中的每一个都会进行一些网页抓取以检索当前的午餐。我知道创建一个完成所有繁重工作的Web服务可能会更好,但现在我想使用这个解决方案。否则,我可能不得不为VPS付费。 –

在我的情况下,我发现模数的名称是不是我的应用程序的相同名称。

在我的情况下,性差异是应用程序的名称包含“ - ”,并在模的名字它替换为“_”

例子: 应用程序的名称=“我的应用内广告” Modulos NAME =“程序my_app “

出于这个原因,这个代码不工作

let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String 

现在我把模名称硬编码。将改善这个答案,如果我找到一个更好的方式 你可以看到你的Modulo的名字在storybord例如