.type
代表一个X元类型 Int.Type 就是Int的元类型
class SearchViewController: UIViewController {
}
class MessageViewController: UIViewController {
}
let vcTypes: [AnyClass] = [SearchViewController.self,
MessageViewController.self]
func setupViewControllers(_ vcTypes: [AnyClass]) {
for vcType in vcTypes {
if vcType is UIViewController.Type {
let vc = (vcType as! UIViewController.Type).init()
print(vc)
}
}
}
setupViewControllers(vcTypes)
.self
获取一个元类型指针,元类型的值
用在类型后面取得类型本身,获得一个表示该类型的值
用在某个实例后面取得这个实例本身
在 Cocoa API中我们经常遇到需要输入一个AnyClass,我们应该使用.self的方式来获取对应的类型。如注册tableView的可重用cell时:
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
AnyClass
仅是一个别名
typealias AnyClass = AnyObject.Type
Any
空协议集合的别名,没有实现任何协议,可以是任何类型、包括类实例与结构体实例、类、枚举、结构体、函数等
typealias Any = protocol<>
class Student {
func test(){
}
}
struct size {
var width:Float
var height:Float
}
var a:Any = 1.2
a = 10
a = "eeee"
a = [10,20]
a = UIView()
a = Student()
a = Student().test()
AnyObject
一个没有声明任何成员的空协议。
表示任意类类型,可以代表任意类类型的实例
var anyObject:AnyObject = Student()
anyObject = UIView()
Any表示一个空的协议集合,AnyObject是一个协议,Any是0个协议