2017-09-25 2 views
0

클래스 이름에서 클래스를 인스턴스화해야합니다. 스위프트 3에서 제대로 작동했지만 스위프트 4로 전환 한 후에는 더 이상 작동하지 않습니다. 나는 NSClassFromString(_:)"MyApp.MyClass""_TtC5MyApp7MyClass"과 함께 사용해 보았지만 성공하지 못했습니다. 그리고 나는 또한 Bundle.main.classNamed(_:) 함수를 사용해 보았습니다. 심지어 @objc(MyBaseClass)을 클래스 선언 위의 MyClass 위에 추가하여 Objective-C에 표시했습니다. MyClassMyBaseClass에서 파생됩니다.Swift 4에서 NSClassFromString을 사용할 수 없습니다.

이것이 작동하지 않는 이유를 알아낼 수 없습니다. 도와주세요. 미리 감사드립니다!

+3

[mcve]를 표시하십시오. – Hamish

+4

"클래스 이름에서 클래스를 인스턴스화해야합니다."그건 나쁜 냄새입니다. 유스 케이스를 보여줄 수 있습니까? 아마도 더 좋은 방법이있을 것입니다. – matt

+0

내 앱은 plist에서 몇 가지 다른 속성과 함께 id 속성을 가진 몇 개의 레스토랑을 읽습니다. 개관 시간. 이 ID는 Restaurant 클래스에서 파생 된 동일한 이름의 클래스를 참조합니다. 각 클래스는 현재의 점심을 검색하기 위해 웹 스크래핑을 수행합니다. 나는 아마도 모든 어려운 일을하는 웹 서비스를 만드는 것이 더 나을 것이라는 것을 알고 있지만, 지금은이 솔루션을 사용하고 싶다. 그렇지 않으면 VPS를 지불해야 할 것입니다. –

답변

0

내 경우에는 모듈러스의 이름이 내 앱의 이름과 다르다는 것을 알았습니다. "-"

내 경우에 diference을 포함하는 응용 프로그램의 이름과 모듈로의 이름이 "_"를

예 교체된다 앱의 이름 = "내-앱" Modulos 이름 = "을 my_app을 "

이 때문에이 코드는 지금

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

작동하지 않습니다 내가 모듈로 이름 하드 코드를 넣습니다. 예를 들어 이야기의 코드에서 모듈러스의 이름을 볼 수 있습니다.

관련 문제