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

时间:2016-07-12 03:38:50

标签: swift cocoa cocoa-touch toll-free-bridging

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

我尝试归档Swift String s,ArrayDictionary s,但效果很好。所以我认为String是符合NSObject的{​​{1}}。

我还在操场上检查了此代码,以确认NSCodingString

NSObject

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

NSObject

那么,为什么在public struct String { /// An empty `String`. public init() } 定义中,我发现代码显示StringString?为什么结构可以是NSObject

1 个答案:

答案 0 :(得分:4)

StringArrayDictionary全部桥接到他们的Objective-C对应方(NSStringNSArrayNSDictionary)并且可以无缝地表现得如此。

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