2017-09-25 12 views
0

クラス名からクラスをインスタンス化する必要があります。私はこれをSwift 3でうまく動作させましたが、Swift 4に変換した後、もう動作させることはできません。私は"MyApp.MyClass""_TtC5MyApp7MyClass"の両方でNSClassFromString(_:)を使用しようとしましたが、成功しませんでした。そして、私もBundle.main.classNamed(_:)機能を使ってみました。私は@objc(MyBaseClass)を追加して、クラス宣言の上にMyClassを追加してObjective-Cに公開しました。 MyClassMyBaseClassに由来します。Swift 4でNSClassFromStringが動作しない

なぜこれが機能していないのか分かりません。お手数ですが。前もって感謝します!

+3

[mcve]を表示してください。 – Hamish

+4

"クラス名からクラスをインスタンス化する必要があります。"これは悪臭です。ユースケースを表示できますか?おそらくもっと良い方法があります。 – matt

+0

私のアプリはplistからいくつかの他の情報と共にidプロパティを持ついくつかのレストランを読み込みます。営業時間。このIDは、Restaurantクラスから派生した同じ名前のクラスを参照します。これらのクラスのそれぞれは、現在のランチを取得するためにいくつかのWebスクレイピングを行います。すべての重い作業を行うWebサービスを作成する方がいいかもしれないが、今のところこのソリューションを使いたいと思う。さもなければ、私はおそらくVPSを支払う必要があります。 –

答えて

0

私の場合、モジュロの名前は私のアプリの名前と同じではないことがわかりました。

私の場合はdiferenceアプリの名前が含まれているということです「 - 」とモジュロの名前でそれは「_」

たとえば置き換えるです: アプリケーションの名前=「マイアプリ」 モジュロ名=「MY_APP 「

そのため、このコードは今の

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

を動作しません。私はモジュロ名のハードコードを置きます。あなたがもっと良い方法を見つけたらこの答えを改善してくれるでしょう 私はstorybordでModuloの名前を見ることができます。

関連する問題