Введение
Разработка под iOS — это постоянное решение типовых и нестандартных задач: от создания адаптивных интерфейсов на SwiftUI до оптимизации запросов Core Data и отладки Combine. В 2026 году, когда Swift 6 стал мейнстримом, а SwiftUI догнал UIKit по производительности, AI-ассистенты (ChatGPT, Claude, Gemini) стали незаменимыми помощниками. Но чтобы получить от них реальную пользу, нужно уметь правильно формулировать промты. В этой статье — 15 конкретных, готовых к копипасту промтов для iOS-разработчика. Каждый промт решает одну задачу: от генерации кода до рефакторинга и написания тестов.
Почему это важно? По данным опроса Stack Overflow 2025, 78% разработчиков iOS используют AI-инструменты хотя бы раз в неделю, но только 23% довольны качеством ответов. Причина — плохие промты. Мы исправим это.
1. Генерация SwiftUI-вью с модификаторами
Когда использовать: Нужно быстро набросать экран с текстом, изображением и кнопкой, соблюдая HIG (Human Interface Guidelines).
Промт:
Сгенерируй SwiftUI View для экрана профиля пользователя. Включает: аватар (Image с системной иконкой person.circle), имя (Text, шрифт .title2, жирный), биографию (Text, шрифт .body, цвет .secondary), кнопку «Редактировать» (Button с системным стилем .borderedProminent). Используй VStack, padding(16), background с цветом .systemGroupedBackground. Добавь модификатор .clipShape(Circle()) для аватара.
Пример использования: Скопируйте промт в ChatGPT или Claude. Вы получите готовый код, который можно вставить в Xcode 16. Если нужно изменить стиль — просто добавьте «сделай с градиентным фоном».
2. Конвертация UIKit-кода в SwiftUI
Когда использовать: Переносите старый проект с UIKit на SwiftUI и нужно сохранить логику.
Промт:
Конвертируй этот UIKit-код в SwiftUI. Исходный код на UIKit:
swift class ProfileViewController: UIViewController { let nameLabel = UILabel() override func viewDidLoad() { nameLabel.text = "John" nameLabel.font = .systemFont(ofSize: 18, weight: .bold) view.addSubview(nameLabel) } }
Сохрани ту же логику: текст, шрифт, жирность. Используй @State для изменения текста.
Пример использования: Вставьте свой UIKit-код вместо примера. Промт вернёт SwiftUI View с аналогичным поведением.
3. Настройка NSFetchedResultsController для Core Data
Когда использовать: Нужно отображать данные из Core Data в UITableView с автоматическим обновлением при изменениях.
Промт:
Напиши код для NSFetchedResultsController в Swift 6. Используй Core Data модель с сущностью "Task" и атрибутами: id (UUID), title (String), isCompleted (Bool). Controller должен:
- сортировать по title по возрастанию
- фильтровать только незавершённые задачи (isCompleted == false)
- обновлять UITableView при изменениях через делегат controllerDidChangeContent
Предоставь полный класс с инициализацией fetchRequest и managedObjectContext.
Пример использования: Полученный код можно вставить в проект с Core Data. Убедитесь, что имя сущности совпадает с вашей моделью.
4. Оптимизация запросов Core Data с предикатами
Когда использовать: Запросы к Core Data тормозят на больших данных (более 10 000 записей).
Промт:
Оптимизируй этот NSFetchRequest для Core Data. Исходный запрос:
swift let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Transaction") request.predicate = NSPredicate(format: "date > %@ AND amount > 100", someDate as CVarArg)
Добавь:
- индексы для атрибутов date и amount (укажи в модели)
- batchSize = 20
- includesSubentities = false
- propertiesToFetch = ["date", "amount", "category"] для уменьшения памяти
Объясни, почему каждый параметр улучшает производительность.
Пример использования: Замените свой запрос в промте. AI объяснит, как настроить индексы в .xcdatamodeld.
5. Отладка Combine pipeline
Когда использовать: Поток данных через Combine не работает — нет событий или дубли.
Промт:
Помоги отладить Combine pipeline. Код:
swift let publisher = PassthroughSubject<Int, Never>() publisher .map { $0 * 2 } .filter { $0 > 10 } .sink { print($0) } publisher.send(5) publisher.send(15)
Вывод: только 30. Ожидалось: 30. Вопрос: почему не выводится 10? Добавь print() операторы (.print()) для отладки и объясни, как использовать .handleEvents для логирования.
Пример использования: Вставьте свой pipeline. Промт добавит отладочные операторы.
6. Создание кастомного Combine Publisher
Когда использовать: Нужен publisher для уведомлений (например, клавиатуры).
Промт:
Напиши кастомный Combine Publisher для NotificationCenter. Publisher должен:
- принимать имя уведомления и объект
- возвращать Notification
- поддерживать cancel через AnyCancellable
Используй Publisher и Subscription из Combine. Пример: publisher для UIResponder.keyboardWillShowNotification.
Пример использования: Полученный код можно использовать для подписки на клавиатурные уведомления в SwiftUI.
7. Рефакторинг Massive View Controller (MVC) в MVVM
Когда использовать: ViewController стал слишком большим (более 500 строк).
Промт:
Рефактори этот ViewController в MVVM с использованием Combine. Исходный код (сокращён):
```swift
class LoginViewController: UIViewController {
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var loginButton: UIButton!@IBAction func loginTapped() { guard let email = emailField.text, !email.isEmpty else { return } // логика входа }}
```
Создай LoginViewModel с @Published свойствами email, isButtonEnabled. ViewModel должна валидировать email (регулярка) и обновлять isButtonEnabled через Combine. ViewController подписывается на изменения.
Пример использования: Замените свой контроллер. Получите ViewModel и обновлённый ViewController.
8. Написание unit-тестов для SwiftUI View
Когда использовать: Нужно проверить, что View отображает правильные данные.
Промт:
Напиши unit-тесты (XCTest) для этой SwiftUI View:
swift struct GreetingView: View { @State private var name = "" var body: some View { VStack { TextField("Enter name", text: $name) Text("Hello, \(name)") } } }
Тесты должны:
- проверить, что при пустом name отображается "Hello, "
- проверить, что при вводе "Alice" отображается "Hello, Alice"
Используй ViewInspector для SwiftUI.
Пример использования: Вставьте свою View. Промт сгенерирует тесты с ViewInspector.
9. Генерация SwiftUI-анимации
Когда использовать: Нужна плавная анимация появления элементов.
Промт:
Создай SwiftUI View с анимацией появления списка. Используй:
- LazyVStack с ForEach
- .transition(.opacity.combined(with: .slide))
- .animation(.easeInOut(duration: 0.5).delay(0.1 * Double(index)), value: isVisible)
Элементы должны появляться последовательно с задержкой. Добавь кнопку для запуска анимации.
Пример использования: Полученный код можно вставить в ContentView.
10. Создание кастомного модификатора SwiftUI
Когда использовать: Повторяющийся стиль кнопок в проекте.
Промт:
Напиши кастомный ViewModifier для стиля кнопки. Модификатор должен:
- установить фон (градиент от blue к purple)
- скруглённые углы (16)
- тень (color: .black.opacity(0.3), radius: 4, x: 0, y: 2)
- масштабирование при нажатии (scaleEffect с анимацией)
Назови модификатор PrimaryButtonStyle. Покажи использование с .modifier(PrimaryButtonStyle()).
Пример использования: Примените модификатор к любой кнопке.
11. Интеграция UIKit в SwiftUI через UIViewRepresentable
Когда использовать: Нужно использовать UIPickerView, который нет в SwiftUI.
Промт:
Создай UIViewRepresentable для UIPickerView. SwiftUI обёртка должна:
- принимать @Binding для выбранной строки
- отображать массив строк (data: [String])
- обновлять binding при выборе
Предоставь полный код с Coordinator и makeUIView/updateUIView.
Пример использования: Вставьте в SwiftUI View как PickerView(data: $items, selection: $selected).
12. Оптимизация производительности SwiftUI List
Когда использовать: Список из 1000+ элементов тормозит.
Промт:
Оптимизируй SwiftUI List для 10 000 элементов. Используй:
- LazyVStack вместо List (для большего контроля)
- идентификаторы (id: .self или id: .id)
- .equatable() для View, чтобы избежать лишних перерисовок
- prefetching через .onAppear для подгрузки данных
Предоставь пример с генерацией 10 000 строк и измерением времени рендеринга через Instruments.
Пример использования: Используйте для больших списков в приложении.
13. Настройка Core Data с CloudKit
Когда использовать: Синхронизация данных между устройствами.
Промт:
Настрой Core Data с NSPersistentCloudKitContainer для синхронизации через iCloud. Включи:
- автоматическое обнаружение конфликтов (NSMergePolicy)
- обработку ошибок с userInfo
- поддержку фоновых обновлений через persistentHistoryTracking
Предоставь код для AppDelegate (или SwiftUI App) с инициализацией контейнера.
Пример использования: Замените NSPersistentContainer на CloudKitContainer.
14. Генерация SwiftUI-форм с валидацией
Когда использовать: Форма регистрации с полями email, пароль, повтор пароля.
Промт:
Создай SwiftUI форму регистрации с валидацией:
- поля: Email (TextField), Password (SecureField), Confirm Password (SecureField)
- валидация: email — регулярка, password — минимум 6 символов, confirm — совпадает с password
- отображение ошибок под полями (красный текст)
- кнопка Submit активна только при валидных данных
Используй @State для полей и вычисляемое свойство isValid.
Пример использования: Вставьте в проект и настройте под свои поля.
15. Создание Combine-пайплайна для сетевого запроса
Когда использовать: Нужно сделать HTTP-запрос и обработать ответ.
Промт:
Напиши Combine pipeline для сетевого запроса. Используй URLSession.dataTaskPublisher для GET-запроса к https://api.example.com/users. Pipeline должен:
- декодировать JSON в модель User (id: Int, name: String)
- обработать ошибки (mapError)
- выполнять на главном потоке (receive(on: DispatchQueue.main))
- использовать AnyCancellable для управления жизненным циклом
Предоставь полный код с классом NetworkManager.
Пример использования: Замените URL и модель на свои.
Заключение
Эти 15 промтов покрывают 80% повседневных задач iOS-разработчика: от генерации UI до отладки Combine и рефакторинга. Главное — не копируйте промты слепо. Адаптируйте их под свой контекст: добавляйте конкретные имена сущностей, модификаторы и типы данных. Помните, что AI — это инструмент, а не замена мышлению. Всегда проверяйте сгенерированный код на соответствие HIG и требованиям проекта.
Попробуйте эти промты уже сегодня в любом AI-ассистенте. Если какой-то промт не сработал — уточните его, добавив больше деталей. Удачи в кодинге!
Комментарии