Являются ли строковые, массивные и словарные объекты Swift объектами NSO? Почему структура может быть NSObject?
Я использую NSKeyedArchiver.archivedDataWithRootObject(obj)
превратить объект в NSData
, archivedDataWithRootObject(obj)
Метод требует, чтобы его параметр был NSObject
, в соответствии с NSCoding
,
Я пробовал архивировать Swift String
s, Array
с и Dictionary
с, и это сработало хорошо. Я так думаю String
является NSObject
в соответствии с NSCoding
,
Я также проверил этот код на детской площадке, чтобы подтвердить, что 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
?
1 ответ
String
, Array
, Dictionary
все соединены со своими аналогами Objective-C (NSString
, NSArray
а также NSDictionary
) и может беспрепятственно действовать так.
Сама строка не наследуется от NSObject
и на самом деле структура, но она соединена с NSString
который делает. Когда вы используете (Swift) String
в вашем коде это может действовать как NSString
тем самым давая вам вывод из кода, который вы предоставили.