Swift中使用NSClassFromString注意点
在 Objective-C
开发中经常会用到一个函数 NSClassFromString
Class class = NSClassFromString(@"MyClass")
NSLog(@"class is: %@", class);
// Output: class is: MyClass
但是在 Swift
中,直接使用这个函数返回值会是 nil
let class = NSStringFromString("MyClass")
print("class is: \(class)")
// Output: class is nil
在 Swift
中使用该函数需要注意的是类名一定要包含项目名
guard let info = Bundle.main.infoDictionary,
let projectName = info["CFBundleExecutable"] as? String else { return }
let nameSpace = projectName.replacingOccurrences(of: "-", with: "_")
let className = "MyView"
let anyClass: AnyClass? = NSClassFromString("\(nameSpace).\(className)")
guard let typeClass = anyClass as? UIView.Type else { return }
let myView = typeClass.init(frame: CGRect(x: 50, y: 50, width: 200, height: 200))
view.addSubview(myView)