我使用NSKeyedArchiver.archivedDataWithRootObject(obj)
将对象转换为NSData
。 archivedDataWithRootObject(obj)
方法要求其参数为NSObject
,符合NSCoding
。
我尝试归档Swift String
s,Array
和Dictionary
s,但效果很好。所以我认为String
是符合NSObject
的{{1}}。
我还在操场上检查了此代码,以确认NSCoding
是String
:
NSObject
但是当我导航到var str = "Hello, playground"
let isObject = (str is NSObject) // isObject is true
的定义(使用Cmd + Click)时,它会显示String
是String
。我找不到显示struct
是String
的代码。
NSObject
那么,为什么在public struct String {
/// An empty `String`.
public init()
}
定义中,我发现代码显示String
是String
?为什么结构可以是NSObject
?
答案 0 :(得分:4)
String
,Array
,Dictionary
全部桥接到他们的Objective-C对应方(NSString
,NSArray
和NSDictionary
)并且可以无缝地表现得如此。
字符串本身并不是从NSObject
继承而且实际上是一个结构,但它是从NSString
桥接而来的。当您在代码中使用(Swift)String
时,它可以像NSString
一样,从而为您提供所提供代码的输出。