Foundation框架类字符串转换为类的NSClassFromString
Foundation框架类字符串转换为类的NSClassFromString

Foundation框架类字符串转换为类的NSClassFromString

NSClassFromString 是 macOS/iOS 系统提供的一个 Objective-C Runtime 函数,作用是:根据类名字符串,动态返回对应的类(Class 类型),可以用来实现“类的反射”。

函数定义

func NSClassFromString(_ className: String) -> AnyClass?

输入:类名字符串,例如 “NSButton” 或 “MyApp.MyCustomView”。

输出:对应的类(AnyClass?),如果找不到该类,返回 nil。

使用示例

if let cls = NSClassFromString("NSButton") as? NSButton.Type {
    let button = cls.init(frame: NSRect(x: 0, y: 0, width: 100, height: 40))
    print("创建按钮:\(button)")
}

在这里通过NSClassFromString获取NSButton类,并尝试转换为NSButton类型并解包。

如果可以转换为NSButton类型并解包,初始化NSButton并打印输出。

Swift自定义类

对于 Swift 自定义类,需要带上模块名(即项目名)前缀:

let className = "MyApp.MyCustomView" // 注意:必须是模块名 + 类名

if let cls = NSClassFromString(className) as? NSView.Type {
    let view = cls.init(frame: .zero)
}

可以使用:

NSStringFromClass(MyCustomView.self)

来获取正确的类名字符串。

使用场景

1、动态创建 UI 控件:用字符串名称动态创建 NSView/UIView。

2、插件架构:加载外部 Bundle 中的类。

3、注册类工厂:类名字符串 → 实际类构造。

4、单元测试中反射类型:避免硬编码类引用。

5、用字符串判断某个类是否存在:NSClassFromString(…) != nil。

总结

NSClassFromString(“类名字符串”) 可以根据类名动态获取类,是 AppKit/Objective-C runtime 中实现“反射”的核心方式。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注