Swift 的字符串、数组和字典是 NSObject 吗?为什么结构可以是 NSObject?

Are Swift's String, Array, and Dictionary NSObjects? Why can a struct be an NSObject?

我使用 NSKeyedArchiver.archivedDataWithRootObject(obj) 将对象转换为 NSDataarchivedDataWithRootObject(obj) 方法要求其参数为 NSObject,符合 NSCoding.

我尝试归档 Swift Strings、Arrays 和 Dictionarys,效果很好。所以我认为 String 是符合 NSCoding.

NSObject

我还在操场上检查了这段代码,以确认 StringNSObject:

var str = "Hello, playground"
let isObject = (str is NSObject) // isObject is true

但是当我导航到 String 的定义(使用 Cmd + 单击)时,它显示 String 是一个 struct。我找不到显示 StringNSObject.

的代码
public struct String {
    /// An empty `String`.
    public init()
}

那么,为什么在 String 定义中,我找不到显示 StringNSObject 的代码?为什么结构可以是 NSObject?

StringArrayDictionary 都桥接到它们的 Objective-C 对应项(NSStringNSArrayNSDictionary) 并且可以无缝地像这样。

String 本身不继承自 NSObject,实际上是一个结构,但它是从 NSString 桥接而来的。当您在代码中使用 (Swift) String 时,它可以像 NSString 一样工作,从而为您提供所提供代码的输出。