美文网首页
Any vs AnyObject vs NSObject in

Any vs AnyObject vs NSObject in

作者: 离子来了 | 来源:发表于2016-11-16 11:43 被阅读150次

    这里说的swift都是指swift3的环境。
    swift是一门类型安全的语言,并且支持类型推断
    类型推断:顾名思义,只能推断类型,不能推断协议

    1.
    class TestObj{}
    TestObj() is NSObject //false
    2.
    class TestObj1:NSObject{}
    TestObj1() is NSObject //true
    

    swift是没有隐式继承NSObject的根节点,除非显示继承。OC存在

    1. Any是一个空协议集合的别名,它表示没有实现任何协议,因此它可以是任何类型

    2. AnyObject是一个成员为空的协议,任何对象都实现了这个协议

    3. NSObject就是一个基类,不过只有在OC中才隐式继承

    let test = ["a",0] //error ,不能推导出类型
    let test:[Any] = ["a",0] //显示声明协议,类似java的泛型向上转型
    let test = ["a" as NSString,0 as NSNumber] //类型推导出NSObject,显示转型为OC的类型了
    
    protocol cc {}
    class TestObj:cc{}
    class TestObj1:NSObject,cc{}
    let bb:[cc] = [TestObj(),TestObj1()]
    

    总结:

    Any是零个协议,任何变量都实现了这个协议
    AnyObject是一个协议,任何都实现了这个协议
    类型推导泛型贯穿的思想

    相关文章

      网友评论

          本文标题:Any vs AnyObject vs NSObject in

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