Swift - 元类型

作者: aven_kang | 来源:发表于2022-03-19 16:55 被阅读0次
    截屏2022-02-24 下午2.08.18.png
    class Animal {
        required init(){}
    }
    
    class Cat : Animal {}
    class Dog : Animal {}
    class Pig : Animal {}
    
     var a1 = Animal()
     var t = Animal.self
     var a2 = t.init()
    
    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]))
    

    Self

    Self一般作为返回值类型,限定返回值跟方法调用者必须是同一类型(也可以作为参数类型)
    protocol Runnable {
        func test() -> Self
    }
    
    class Person : Runnable {
        required init(){}
        func test() -> Self {
            type(of: self).init()
        }
    }
    
    class Student : Person {}
    
    type(of: self).init()
    

    这一句为什么不能返回Person(),毕竟是Person去调用这个方法的,但是要考虑到可能其他类会继承自Person,那么自然就不能返回Person这个对象,所以需要获取到调用者类型,再初始化type(of: self).init()。

    var p  = Person()
    print(p.test()) // 这里返回的是Person对象
    var stu = Student()
    print(stu.test()) // 这里返回的是Student对象

    相关文章

      网友评论

        本文标题:Swift - 元类型

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