AnyClass、元类型和.self
2019-06-28 本文已影响0人
盖小聂
class MusicViewController: UIViewController {
}
class AlbumViewController: UIViewController {
}
class ViewController: UIViewController {
func setupViewControllers(vcTypes: [AnyClass]) {
for vcType in vcTypes {
if vcType is UIViewController.Type {
let vc = (vcType as! UIViewController.Type).init()
print(vc)
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
//将元类型存入数组并且传递给别的方法来进行配置这一点上,元类型编程就很难被替代了。
let usingVCTypes: [AnyClass] = [MusicViewController.self, AlbumViewController.self]
setupViewControllers(vcTypes: usingVCTypes)
}
}
补充说明:
- typealias AnyClass = AnyObject.Type
- 通过AnyObject.Type这种方式所得到是一个元类型(Meta)。
- 在声明时我们总是在类型的名称后面加上.Type,比如A.Type代表的是A这个类型的类型。从A中取出其类型时,我们需要使用到.self
- AnyClass和A.Type都是类型名称,A.self代表类型名称的值。
- 在将这些元类型存入数组并且传递给别的方法来进行配置这一点上,元类型编程就很难被替代。