1.元类型是什么鬼?
class Person {
}
// 输入Person.self Xcode提示 Person.Type
// 说白了, var pType: Person.type == Person.self
2.应用示例1
//tableView.register(<#T##cellClass: AnyClass?##AnyClass?#>, forCellReuseIdentifier: <#T##String#>)
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "identifier")
// AnyClass定义: 任何对象的类型
public typealias AnyClass = AnyObject.Type
很多方法要求传入元类型,而不是类名.
3.应用示例2: 动态创建对象
class Animal {
required init() {}
}
class Cat: Animal {}
class Dog: Animal {}
class Pig: Animal {}
func create(_ clses: [Animal.Type]) -> [Animal] {
var arr = [Animal]()
for cls in clses {
arr.append(cls.init())
}
return arr
}
print(create([Cat.self, Dog.self, Pig.self]))
总结: Person.self 存放着元数据的地址值