2017-09-25 86 views
0

我需要從它的類名實例化一個類。我在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付費。 –

回答

0

在我的情況下,我發現模數的名稱是不是我的應用程序的相同名稱。

在我的情況下,性差異是應用程序的名稱包含「 - 」,並在模的名字它替換爲「_」

例子: 應用程序的名稱=「我的應用內廣告」 Modulos NAME =「程序my_app 「

出於這個原因,這個代碼不工作

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

現在我把模名稱硬編碼。將改善這個答案,如果我找到一個更好的方式 你可以看到你的Modulo的名字在storybord例如