1.元类型是什么鬼? demo

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 存放着元数据的地址值