什么时候变量是 AnyObject 而不是 NSObject

When is a variable a AnyObject but not a 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 but not NSObject?

据我了解,

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

以上理解有误请指正
抱歉,我是 Objc 的新手,需要帮助来理解这些概念。任何解释这些概念的网站 url 都会很有用。提前致谢! :)

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

在其他平台上,NSObject 只是“另一个 class”,implemented in Swift,因此只有 class 明确将 NSObject 作为超级class 有 NSObject 个实例。