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
我试着归档SwiftString
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试试