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)
posted @ 2021-11-08 14:21  小小个子大个头  阅读(388)  评论(0编辑  收藏  举报