Swift学习笔记

Swift - 元类型

2022-03-19  本文已影响0人  aven_kang
截屏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对象
上一篇 下一篇

猜你喜欢

热点阅读