Swift 的字符串、数组和字典是 NSObject 吗?为什么结构可以是 NSObject?
Are Swift's String, Array, and Dictionary NSObjects? Why can a struct be an NSObject?
我使用 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 + 单击)时,它显示 String
是一个 struct
。我找不到显示 String
是 NSObject
.
的代码
public struct String {
/// An empty `String`.
public init()
}
那么,为什么在 String
定义中,我找不到显示 String
是 NSObject
的代码?为什么结构可以是 NSObject
?
String
、Array
、Dictionary
都桥接到它们的 Objective-C 对应项(NSString
、NSArray
和 NSDictionary
) 并且可以无缝地像这样。
String 本身不继承自 NSObject
,实际上是一个结构,但它是从 NSString
桥接而来的。当您在代码中使用 (Swift) String
时,它可以像 NSString
一样工作,从而为您提供所提供代码的输出。
我使用 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 + 单击)时,它显示 String
是一个 struct
。我找不到显示 String
是 NSObject
.
public struct String {
/// An empty `String`.
public init()
}
那么,为什么在 String
定义中,我找不到显示 String
是 NSObject
的代码?为什么结构可以是 NSObject
?
String
、Array
、Dictionary
都桥接到它们的 Objective-C 对应项(NSString
、NSArray
和 NSDictionary
) 并且可以无缝地像这样。
String 本身不继承自 NSObject
,实际上是一个结构,但它是从 NSString
桥接而来的。当您在代码中使用 (Swift) String
时,它可以像 NSString
一样工作,从而为您提供所提供代码的输出。