4

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

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

我还在操场上检查了这段代码,以确认它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定义中,我找不到显示它的String代码NSObject?为什么结构可以是一个NSObject

4

1 回答 1

4

String, Array,Dictionary都桥接到了它们的 Objective-C 对应物(NSString,NSArrayNSDictionary),并且可以像这样无缝地运行。

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

于 2016-07-12T03:43:32.137 回答