命名空间和反射机制

什么是反射机制

  • 对于任意一个类,都能够知道这个类的所有属性和方法
  • 对于任意一个对象,都可以调用它的任意一个方法和属性
  • 这种动态获取的信息以及动态调用对象方法的功能叫做 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

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

你可能感兴趣的:(命名空间和反射机制)