以前写的时候,用以下写法
func fromJSONClassName(responseData: NSMutableDictionary?, className: NSString) -> AnyObject { let rootObject = NSClassFromString("XXXX."+(className as String)) as! NSObject.Type let rootObjectResult = rootObject.init() fromJSONToObjec(childNote: responseData, rootObject: rootObjectResult as! WCFObject) return rootObjectResult }let rootObject = NSClassFromString(“XXXX.”+(className as String)) as! NSObject.Type 我直接把命名空间给写死了,但是突然发生了一个问题,客户那一直空指针,取不到类名,我这一直没有问题。我就在想是不是应该动态去取,不能这么写死了,然后我就修改成以下写法:
func fromJSONClassName(responseData: NSMutableDictionary?, className: NSString) -> AnyObject { // 动态获取命名空间 guard let clsname = Bundle.main.infoDictionary!["CFBundleExecutable"] else { return GetUserStatus_Request.init() } // 通过命名空间和类名,获取所需类 let rootObject = NSClassFromString((clsname as! String)+"."+(className as String)) as! NSObject.Type // Swift中创建一个类,必须知道它的类型,所以通过上面的方式取得类 let rootObjectResult = rootObject.init() fromJSONToObjec(childNote: responseData, rootObject: rootObjectResult as! WCFObject) return rootObjectResult }通过上面的方式,我正确修改了这个让人头大的不再现问题,拿出来给大家做参考吧!