美文网首页
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