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 中的类型

    Swift 中的类型 本文主要介绍Swift中的元类型,其中包含AnyObject、Any、AnyClass、T....

  • swift元类型

    一、元类型(术语表示metaType) 元类型是指所有类型的类型,包括类、结构体、枚举和协议。 类、结构体或枚举类...

  • Swift - 元类型

    Self Self一般作为返回值类型,限定返回值跟方法调用者必须是同一类型(也可以作为参数类型) 这一句为什么不能...

  • Swift-元类型

    Any,AnyObject Any:可以代表任意类型(枚举,结构体,类,函数类型) AnyObject:可以代表任...

  • 思考 Swift 中的 MirrorType 协议

    Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集。或许 Swift 因有严格的类型检验而不需要反射...

  • Swift--AnyClass初步探索

    Swift 日常笔记碎片知识 AnyClass是一个元类型typealias AnyClass = AnyObje...

  • Swift中数据类型

    Swift中数据类型 标签(空格分隔): Swift Swift类型的介绍 Swift中的数据类型也有:整型/浮点...

  • Swift 元类型和.self

    一、前言 也许 Any 和 AnyObject 你并不陌生,但是你不一定熟悉 AnyClass。 1.1 Any ...

  • Swift中数据类型

    Swift类型的介绍 Swift中的类型推导 Swift中基本运算

  • Swift中的值类型和参照类型

    Swift中的值类型和参照类型 Swift中的值类型和参照类型

网友评论

    本文标题:Swift - 元类型

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