swift中Anyobject、self、Any和AnyClas
2022-01-26 本文已影响0人
余晖依旧耀眼
1、Anyobject
代表任意类的实例,类的类型

当定义一个协议,只想让类去遵循,可以用Anyobject

当不知道具体类型的时候,可以用用Anyobject
表示;当确定了具体类型之后,就可以用关键字as
转换成具体的类型。

如果你不确定p
是不是Worker
就可以用as?
来进行类型转换,转换是失败p2
就是nil。
2、self
T.self:T是实例对象,当前T.self返回的就是实例对象本身;T是类,当前T.self返回的就是元类型

在方法中的self

在实例方法中self
是实例对象的本身;在类方法中self
是类型本身。
3、Self
Self
类型不是特定类型,而是为了方便引用当前类型,而无需重复或知道该类型的名称。在协议声明或者协议成员声明中,Self
类型是指最终符合协议的类型。
Self
作为方法的返回值

Self
在协议中代表遵循协议的类型

Self
在类中代表类型本身

4、Any
代表任意类型,包括funcation
和Optional
类型,比Anyobject
代表的更广。

可以用Any
来表示包含不同类型的数组
5、AnyClass
代表任意实例的类型,是AnyObject.Type
类型


6、获取动态类型
静态类型,在编译期确定的;动态类型,在运行期确定的。

可以通过type(of:T)
来获取动态类型