美文网首页
Swift5.1学习随笔之X.self、X.Type、AnyCl

Swift5.1学习随笔之X.self、X.Type、AnyCl

作者: SAW_ | 来源:发表于2020-05-06 10:59 被阅读0次
class Person { }
var p = Person()

上面的例子🌰中:Person对象放在堆空间,指针变量p存储的是Person堆空间地址值。堆空间变量中的前8个字节存储的是元类型的地址值,存放着类型相关信息,存放在另外一块内存。

  • X.self是一个元类型(metadata)的指针,metadata存放着类型相关信息

Person.self8个字节,放着元类型的地址,跟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]))

相关文章

网友评论

      本文标题:Swift5.1学习随笔之X.self、X.Type、AnyCl

      本文链接:https://www.haomeiwen.com/subject/lmyightx.html