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对象
网友评论