Когда переменная является AnyObject, но не NSObject - PullRequest
1 голос
/ 05 февраля 2020

Представьте переменную, объявленную как показано ниже:

let sample: AnyObject = "anyobject" как AnyObject

Теперь, когда я пытаюсь получить тип образца var, он отображается как NSObject.

Ниже приведен фрагмент кода:

   let sample : AnyObject = "anyobject" as AnyObject

        if sample is NSObject {
            print("Type is NSObject")
        }

        if sample is AnyObject {
            print("Type is AnyObject")
        }

        if sample is Any {
            print("Type is Any")
        }

И вывод:

Type is NSObject
Type is AnyObject
Type is Any

Я думал, что вывод будет AnyObject и Any, поскольку AnyObject является подмножеством Any. Но это также показало NSObject.

Мой вопрос: 1. Когда переменная является AnyObject, но не NSObject? 2. Когда тип переменной Любой, но не NSObject?

Согласно моему пониманию,

NSObject является подмножеством AnyObject. NSObject является базовым классом для большинства объектов Obj C. AnyObject является подмножеством Any. AnyObject является экземпляром любого типа класса. Любой является представлением экземпляра любого типа вообще, включая типы функций и необязательные типы.

Пожалуйста, поправьте меня, если я ошибаюсь с вышеуказанным пониманием. Извините, я новичок в Obj c и мне нужна помощь в понимании концепций. Любой URL веб-сайта, который объясняет эти понятия, будет полезен. Заранее спасибо! :)

1 Ответ

2 голосов
/ 05 февраля 2020

На платформах с совместимостью Objective- C (что означает все платформы Apple и никаких других), каждый тип класса (тайно) является подклассом SwiftObject класса , который обеспечивает NSObject соответствие протокола.

На других платформах NSObject - это «просто другой класс», реализован в Swift , поэтому только класс, явно имеющий NSObject в качестве суперкласса, имеет экземпляры, которые являются NSObject с.

...