美文网首页
命名空间和反射机制

命名空间和反射机制

作者: JailbreakLifer | 来源:发表于2019-11-21 15:08 被阅读0次

    什么是反射机制

    • 对于任意一个类,都能够知道这个类的所有属性和方法
    • 对于任意一个对象,都可以调用它的任意一个方法和属性
    • 这种动态获取的信息以及动态调用对象方法的功能叫做 Java 语言的反射机制

    在 OC 中的反射机制

    • 利用 NSClassFromString 方法来使用字符串获取类
    • 利用 isMemberOfClass: 判断是否是某一个类
    • 利用 isKindOfClass 判断是否是某个类的子类
    • 利用 conformsToProtocol 判断对象是否遵守某个协议
    • 利用 respondsToSelector 判断是否实现了某个方法
    • 利用 performSelector 或者 objc_msgSend 间接调用方法

    Swift 中的反射机制

    对于反射机制的好处,最主要的一个就是解耦,可以更好的把功能封装起来
    在 Swift 中,类似与 NSClassFromString 的写法,由于 Swift 引入了命名空间的概念,所以在获取对应类的时候,需要传入命名空间。

    获取项目的命名空间:

    Bundle.main.infoDictionary?["CFBundleName"]
    

    可以利用 extension 把获取命名空间的封装起来

    1.对象方法
    extension Bundle{
        func namespace() -> String {
            //返回命名空间
            return infoDictionary?["CFBundleName"] as? String ?? ""
        }
    }
    
    //调用
    let name = Bundle.main.namespace()
    

    2.计算型属性

    extension Bundle{
        var namespace:String {
            return infoDictionary?["CFBundleName"] as? String ?? ""
        }
    }
    
    //调用
    let name = Bundle.main.namespace
    

    这样实现调用起来比较方便

    相关文章

      网友评论

          本文标题:命名空间和反射机制

          本文链接:https://www.haomeiwen.com/subject/bsqaictx.html