В документации указано
Примечание
Классы Swift не наследуются от универсального базового класса. Классы вы определить без указания суперкласса автоматически стать базой классы для вас, чтобы вы могли опираться ".
Отрывок из: Apple Inc." Язык быстрого программирования. "iBooks.
Это не имеет большого значения для меня. Существует причина, почему Objective-C имеет универсальный базовый класс, и та же причина должна применяться к Swift, не так ли? NSObject
управляет семантикой сохранения/выпуска, реализацией по умолчанию для isEqual:
, hash
и description
. Все эти функции доступны также в Swift.
(Objective-C и Swift используют ту же среду выполнения)
Итак, что с этим? Являются ли классы Swift без определенных суперклассов только NSObject
, которые представляют собой правильные корневые классы под капотом? Или это дублирование объекта по умолчанию для каждого нового корневого класса? Или они создали еще один Swift-baseclass? Реализация retain
и release
действительно сложна, потому что ей необходимо одновременно учитывать многопоточность и слабые ссылки.
Может быть, универсальный базовый класс в Swift (несмотря на то, что говорит документация)? Это было бы очень удобно, потому что в Objective-C я могу, например. напишите расширения, которые позволяют мне объединять вызовы методов в основной runloop, например [obj.eventually updateCounter]
, который может быть прочитан как "вызов -updateCounter
в следующий раз, когда основная runloop получает контроль. Если, тем временем, я снова вызываю этот метод, он должен вызывается только один раз в любом случае. С помощью этого расширения можно реализовать -[UIView setNeedsDisplay]
как [self.eventually display];
Это невозможно в Swift, если нет универсального базового класса (или, может быть, он знает, кто знает?)