15 промтов для iOS: SwiftUI, UIKit, Core Data — шпаргалка для разработчика

Введение

Разработка под 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-ассистенте. Если какой-то промт не сработал — уточните его, добавив больше деталей. Удачи в кодинге!

← Все статьи

Комментарии

Читайте также