class Person { }
var p = Person()
上面的例子🌰中:Person对
象放在堆空间,指针变量p
存储的是Person
堆空间地址值。堆空间变量中的前8
个字节存储的是元类型的地址值,存放着类型相关信息,存放在另外一块内存。
X.self
是一个元类型(metadata
)的指针,metadata
存放着类型相关信息
Person.self
:8
个字节,放着元类型的地址,跟Person()
对象前8
个字节放的东西是一样的
var pType:Person.Type = Person.self
X.self
是属于X.Type
类型
class Person { }
class Student: Person { }
var perType: Person.Type = Person.self
var stuType: Student.Type = Student.self
perType = Student.self
var anyType: AnyObject.Type = Person.self
anyType = Student.self
public typealias AnyClass = AnyObject.Type
var anyTYpe2: AnyClass = Person.self
anyTYpe2 = Student.self
元类型的应用
class Animal {
required init() { }
}
class Cat: Animal { }
class Dog: Animal { }
class Pig: Animal { }
func creat(_ clses: [Animal.Type]) -> [Animal] {
var arr = [Animal]()
for cls in clses {
arr.append(cls.init())
}
return arr
}
print(creat([Cat.self, Dog.self, Pig.self]))
网友评论