美文网首页
AnyObject,Any,AnyClass区别

AnyObject,Any,AnyClass区别

作者: 吕建雄 | 来源:发表于2022-02-21 21:56 被阅读0次

结论:

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:

let array: [Any] = [1,"a"]

let array1: [AnyObject] = [1,"a"]

编译Any结果

通过结果可知,Any可代表任意类型(包括function,Optional)

Any包含AnyObject

AnyClass:

let tech=LTTech()

let any: AnyClass = tech.self

let any1: AnyClass = LTTech.self

let any2: AnyClass = tech.self.self

编译结果1

通过编译结果可知:AnyClass = AnyObject.Type

即:代表任意实例的类型

T.self : T是实例对象,当前T.self返回的就是他本身;如果T是类,当前T.self返回的就是元类型

let t =LTTech()

let t1 = t.self

let t2 = t.self.self

lett3 =LTTech.self

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

相关文章

网友评论

      本文标题:AnyObject,Any,AnyClass区别

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