XZ_Swift 在Swift中以字符串形式获取对象的类名

41 篇文章 0 订阅
文章介绍了如何在Swift中通过扩展NSObject来获取其子类的类名,包括使用`NSStringFromClass`方法和自定义协议`NameDescribable`。此外,还展示了如何为不同类型如数组、枚举等添加这个功能。
摘要由CSDN通过智能技术生成

因为NSObject是大多数Objective-C类层次结构的根类,所以可以尝试对NSObject进行扩展,以获取NSObject的每个子类的类名:

extension NSObject {
    var theClassName: String {
        return NSStringFromClass(type(of: self))
    }
}

// 调用
let button = UIButton(type: .custom)
let responderName = button.theClassName
print("-----responderName:", responderName) // 打印结果: UIButton

或者可以创建一个静态函数,其参数类型为Any (The protocol to which all types implicitly conform),并以字符串形式返回类名:

class Utility{
    class func classNameAsString(_ obj: Any) -> String {
        //prints more readable results for dictionaries, arrays, Int, etc
        return String(describing: type(of: obj))
    }
} 

下面是将typeName作为变量(work with both value type or reference type)的扩展

protocol NameDescribable {
    var typeName: String { get }
    static var typeName: String { get }
}

extension NameDescribable {
    var typeName: String {
        return String(describing: type(of: self))
    }

    static var typeName: String {
        return String(describing: self)
    }
}

如何使用:

// Extend with class/struct/enum...
extension NSObject: NameDescribable {}
extension Array: NameDescribable {}
extension UIBarStyle: NameDescribable { }

print(UITabBarController().typeName)
print(UINavigationController.typeName)
print([Int]().typeName)
print(UIBarStyle.typeName)

// Out put:
UITabBarController
UINavigationController
Array<Int>
UIBarStyle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值