美文网首页
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