Являются ли строковые, массивные и словарные объекты Swift объектами NSO? Почему структура может быть NSObject?

Я использую NSKeyedArchiver.archivedDataWithRootObject(obj) превратить объект в NSData, archivedDataWithRootObject(obj) Метод требует, чтобы его параметр был NSObject, в соответствии с NSCoding,

Я пробовал архивировать Swift Strings, 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 тем самым давая вам вывод из кода, который вы предоставили.

Другие вопросы по тегам