~/VibeHandbook

Приложения / Mobile

swift.org

Swift

Что это такое

Swift — это современный, открытый язык программирования от Apple для создания приложений на iOS, iPadOS, macOS, watchOS и tvOS — и всё чаще для серверного и кроссплатформенного кода. Он заменил Objective-C в качестве языка по умолчанию для разработки под Apple, сочетая чистый, выразительный синтаксис со строгой статической типизацией и безопасностью работы с памятью. Вы пишете Swift в Xcode (или в любом редакторе с открытым набором инструментов) и публикуете в App Store.

Сильные стороны

  • Безопасен по своей сути: optional-ы делают «отсутствие значения» явным, а компилятор отлавливает целые классы крашей.
  • Быстр — компилируется в нативный машинный код с производительностью, близкой к C.
  • Выразительный, читаемый синтаксис с выводом типов, замыканиями, дженериками и типами-значениями.
  • Конкурентность первого класса через async/await и акторы.
  • Полный доступ ко всем фреймворкам Apple и новейшим возможностям ОС в день их выхода.

Компромиссы

  • Экосистема сосредоточена на платформах Apple; кроссплатформенная поддержка существует, но гораздо менее зрелая.
  • Инструментарий для разработки приложений фактически означает Xcode и Mac.
  • Быстрая эволюция языка временами означала работу по миграции между версиями.
  • Реальная кривая обучения вокруг optional-ов, семантики значений и ссылок, а также конкурентности.

Когда использовать

Берите Swift, когда строите нативное приложение для любой платформы Apple и хотите лучшую производительность, новейшие возможности ОС и безопасную, поддерживаемую кодовую базу. Это правильный выбор по умолчанию для отполированного приложения под iPhone или Mac.

Подходит для вайб-кодинга

Swift хорошо подходит для кодинга с помощью ИИ, потому что его строгий компилятор превращает расплывчатые ошибки в конкретные ошибки, которые можно вставить обратно модели. Попросите ассистента опираться на optional-ы и guard для безопасного развёртывания, предпочитать типы-значения (структуры) и async/await пирамидам колбэков и держать логику представления вне моделей. Поскольку компилятор строг, сгенерированный код, который собирается, обычно структурно крепок — пусть ошибки направляют каждую итерацию.

struct Todo: Identifiable {
    let id = UUID()
    var title: String
    var done = false
}

func pending(_ todos: [Todo]) -> [Todo] {
    todos.filter { !$0.done }
}