Ответ
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 для интерактивной разработки).