Swift 是迅捷的';s字符串、数组和字典对象?为什么结构可以是NSObject?

Swift 是迅捷的';s字符串、数组和字典对象?为什么结构可以是NSObject?,swift,cocoa,cocoa-touch,toll-free-bridging,Swift,Cocoa,Cocoa Touch,Toll Free Bridging,我使用NSKeyedArchiver.archivedDataWithRootObject(obj)将对象转换为NSData。archivedDataWithRootObject(obj)方法要求其参数为NSObject,符合NSCoding 我试着归档SwiftStrings、Arrays和Dictionarys,效果很好。因此我认为String是符合NSCoding的NSObject 我还在操场上检查了这个代码,以确认String是一个NSObject: var str = "Hello,

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

我试着归档Swift
String
s、
Array
s和
Dictionary
s,效果很好。因此我认为
String
是符合
NSCoding
NSObject

我还在操场上检查了这个代码,以确认
String
是一个
NSObject

var str = "Hello, playground"
let isObject = (str is NSObject) // isObject is true
但是当我导航到
String
的定义时(使用Cmd+Click),它显示
String
是一个
struct
。我找不到显示
String
NSObject
的代码

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

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

String
数组
字典
都与它们的Objective-C对应物(
NSString
NSArray
NSDictionary
)桥接在一起,并且可以无缝地这样做


字符串本身并不是从
NSObject
继承的,实际上是一个结构,但它是从
NSString
桥接而来的。当您在代码中使用(Swift)
字符串时,它的作用类似于
NSString
,从而提供您提供的代码的输出。

感谢您的解释。你能帮我创建一个MyString结构吗?它可以像swift String结构一样桥接到NSString吗?@huync这种行为是swift语言内置的,你将无法创建自己的结构并将其与NSString桥接。。。如果您想这样做的原因是您可以使用
NSKeyedArchiver
,那么您最好简单地创建一个继承自
NSString
NSObject
@BlakeLockley的类。是否有任何资源可以了解如何在NSString和String等类型之间进行桥接?喜欢它所涉及的技术过程吗+不过。@AkshanshThakur试试