Каких современных языковых возможностей не хватало в Objective-C по сравнению со Swift?

«Каких современных языковых возможностей не хватало в Objective-C по сравнению со Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Objective-C, будучи надмножеством C, не имел ряда современных языковых конструкций, которые стали ключевыми преимуществами Swift:

  • Строгая типобезопасность (Type Safety): Swift минимизирует runtime-ошибки благодаря строгой проверке типов на этапе компиляции.
  • Дженерики (Generics): Поддержка обобщённого программирования для создания типобезопасных, повторно используемых функций и коллекций.
  • Опционалы (Optionals): Явное указание возможности отсутствия значения (nil), что устраняет неожиданные падения из-за обращения к nil.
  • Расширения протоколов (Protocol Extensions): Возможность предоставлять реализации по умолчанию для методов, объявленных в протоколе.
  • Типы-значения (Value Types): Структуры (struct) и перечисления (enum) с семантикой копирования, что повышает предсказуемость и потокобезопасность (в Objective-C почти всё — ссылочные типы, class).
  • Современный синтаксис: Более лаконичный и безопасный синтаксис для замыканий, обработки строк, коллекций и управления памятью (ARC по умолчанию).

Пример сравнения управления памятью:

// Objective-C: требуется ручное управление памятью (при использовании MRC)
NSArray *array = [[NSArray alloc] initWithObjects:@1, @2, nil];
// ... использование
[array release];
// Swift: автоматический подсчёт ссылок (ARC) и типы-значения
let array = [1, 2, 3] // Не требуется ручное управление памятью

Также Objective-C отставал в инструментарии (например, отсутствие аналога Playgrounds для интерактивной разработки).