什么是反射机制
- 对于任意一个类,都能够知道这个类的所有属性和方法
- 对于任意一个对象,都可以调用它的任意一个方法和属性
- 这种动态获取的信息以及动态调用对象方法的功能叫做 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
这样实现调用起来比较方便