无法在Swift 4中使用NSClassFromString工作
问题描述:
我需要从它的类名实例化一个类。我在Swift 3中可以正常工作,但在转换为Swift 4之后,我无法再继续工作了。我曾尝试使用NSClassFromString(_:)
与"MyApp.MyClass"
和"_TtC5MyApp7MyClass"
但没有成功。而且我也尝试使用Bundle.main.classNamed(_:)
函数。我甚至在MyClass
的类声明上面添加了@objc(MyBaseClass)
以将其公开到Objective-C。 MyClass
派生自MyBaseClass
。无法在Swift 4中使用NSClassFromString工作
我不明白为什么这不起作用,请帮忙。提前致谢!
答
在我的情况下,我发现模数的名称是不是我的应用程序的相同名称。
在我的情况下,性差异是应用程序的名称包含“ - ”,并在模的名字它替换为“_”
例子: 应用程序的名称=“我的应用内广告” Modulos NAME =“程序my_app “
出于这个原因,这个代码不工作
let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String
现在我把模名称硬编码。将改善这个答案,如果我找到一个更好的方式 你可以看到你的Modulo的名字在storybord例如
请向我们展示一个[mcve]。 – Hamish
“我需要从它的类名实例化一个类”这是一种难闻的气味。你能展示你的用例吗?也许有更好的方法。 – matt
我的应用程序从一个plist中读取了几个餐厅,这些餐馆都有一个id特性以及一些其他信息,例如,营业时间。这个id引用了一个从Restaurant类派生的具有相同名称的类。这些类中的每一个都会进行一些网页抓取以检索当前的午餐。我知道创建一个完成所有繁重工作的Web服务可能会更好,但现在我想使用这个解决方案。否则,我可能不得不为VPS付费。 –