首页 > 解决方案 > 什么时候变量是 AnyObject 而不是 NSObject

问题描述

想象一个声明如下的变量:

让样本:AnyObject = "anyobject" as AnyObject

现在,当我尝试检索 var 示例的类型时,它显示为 NSObject。

以下是代码片段:

   let sample : AnyObject = "anyobject" as AnyObject

        if sample is NSObject {
            print("Type is NSObject")
        }

        if sample is AnyObject {
            print("Type is AnyObject")
        }

        if sample is Any {
            print("Type is Any")
        }

输出是:

Type is NSObject
Type is AnyObject
Type is Any

我认为输出将是 AnyObject 和 Any,因为 AnyObject 是 Any 的子集。但它也确实显示了 NSObject。

我的问题是:
1. 什么时候变量是 AnyObject 而不是NSObject?
2. 什么时候是变量类型 Any 而不是NSObject?

据我了解,

NSObject 是 AnyObject 的子集。NSObject 是大多数 ObjC 对象的基类。
AnyObject 是 Any 的子集。AnyObject 是任何类类型的实例。
Any 是任何类型的实例的表示,包括函数类型和可选类型。

如果我对上述理解有误,请纠正我。
抱歉,我对 Objc 有点陌生,需要帮助来理解这些概念。任何解释这些概念的网站 url 都会很有用。提前致谢!:)

标签: swifttypesnsobjectanyanyobject

解决方案


在具有 Objective-C 兼容性的平台上(这意味着 Apple 的所有平台,而不是其他平台),每个类类型(秘密地)都是 class 的子SwiftObject它提供NSObject协议一致性。

在其他平台上,NSObject是“只是另一个类”,在 Swift 中实现,因此只有明确具有NSObject作为超类的类才具有NSObjects 的实例。


推荐阅读