swift - 什么时候变量是 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 都会很有用。提前致谢!:)
解决方案
在具有 Objective-C 兼容性的平台上(这意味着 Apple 的所有平台,而不是其他平台),每个类类型(秘密地)都是 class 的子类SwiftObject
,它提供NSObject
协议一致性。
在其他平台上,NSObject
是“只是另一个类”,在 Swift 中实现,因此只有明确具有NSObject
作为超类的类才具有NSObject
s 的实例。
推荐阅读
- android - 如何在 Android Studio 中构建 Android 包/应用程序。构建此应用程序的任何其他方式
- c++ - 通过 typedef 强制模板实例化:g++ 成功,Visual C++ 失败
- typescript - 如何在打字稿中使用 jest
- angular - 在 Angular HttpClient 中识别错误源(客户端或服务器)
- ios - iOS13 中的操作表 UI 问题,无法自定义消息和边框线
- javascript - 如何在角度服务类中初始化对象、数组和对象数组?
- database - Flutter shared_preferences 插件是否适用于桌面 Flutter 应用程序?
- php - Codeigniter 网站不时停止
- r - 用R中的相对频率有效地替换数据框列的值
- laravel - laravel 背包 4 crudtrait 错误使用权限管理