结论:
1、AnyObject:代表任意类的实例,类的类型,仅类遵守的协议
2、 Any:代表任意类型,包括function类型或者Optional类型
3、 AnyClass:代表任意实例的类型(AnyObject.Type) 类型
AnyObject
通过代码来看具体结果
打印结果class LTTech{
var age = 10
}
var t = LTTech()
var t1: AnyObject = t
var t2: AnyObject = LTTech.self
输出内容如下:
编译结果protocol MyProtocol1: AnyObject {
}
class LTTech3: MyProtocol1 {
}
struct LTTech3: MyProtocol1 {
}
通过编译可知,当协议继承AnyObject后,只有类可遵守该协议(struct是不可遵守的)
Any:
编译Any结果let array: [Any] = [1,"a"]
let array1: [AnyObject] = [1,"a"]
通过结果可知,Any可代表任意类型(包括function,Optional)
Any包含AnyObject
AnyClass:
编译结果1let tech=LTTech()
let any: AnyClass = tech.self
let any1: AnyClass = LTTech.self
let any2: AnyClass = tech.self.self
通过编译结果可知:AnyClass = AnyObject.Type
即:代表任意实例的类型
T.self : T是实例对象,当前T.self返回的就是他本身;如果T是类,当前T.self返回的就是元类型
self截图let t =LTTech()
let t1 = t.self
let t2 = t.self.self
lett3 =LTTech.self
通过po t1,t2可知 t1即为t,t2也为t;即:t为实例对象是,当前t.self返回的就是他本身
t3汇编通过汇编代码,任何读取t3对应的值,上图表明当t为类,当前t.self返回的就是元类型
Self
Self的一般用法
1:作为方法返回值,代表当前类;
2:协议返回Self,Self代表遵循该协议的类
class LTTech3{
static let age=10
//Self没有特别用意 Self作为方法的返回类型
func test() ->Self{
//当前实例对象
return self
}
}
protocol MyProtocol {
//Self代表遵循该协议的类
func get() ->Self
}
class LTTech5: MyProtocol{
func get() -> Self{//当前Self指代遵循协议的类型LTTech5
return self
}
}
let tech5 = LTTech5()
print(tech5.get()) //SwiftMirror.LTTech5
网友评论