и посмотреть медиа
Swift | Вопросы собесов
и посмотреть медиа
Вопросы для собеседований по Swift, тесты и задачи для iOS-разработчиков в Telegram.
Вопросы для собеседований по Swift, тесты и задачи для iOS-разработчиков в Telegram.
AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.
Канал посвящен подготовке к собеседованиям по языку Swift. Здесь собраны актуальные вопросы, тесты, практические задачи и информация о вакансиях. Идеально для начинающих и опытных iOS-разработчиков, желающих освежить знания и успешно пройти интервью.
🤔 Что такое Notification Service Extension? Это расширение для iOS-приложений, которое позволяет модифицировать push-уведомления до их показа. Например, можно добавить изображение, вложение или изменить текст перед отображением пользователю. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что может быть ключом и значением для dictionary? Словарь (Dictionary) представляет собой коллекцию пар ключ-значение, где каждый ключ должен быть уникальным. Чтобы использовать какой-либо тип в качестве ключа словаря, этот тип должен соответствовать протоколу Hashable. Это требование обусловлено тем, что Swift использует хеш-таблицу для хранения элементов словаря, что обеспечивает быстрый доступ к его элементам. 🚩Ключи Должны быть уникальными: Каждый ключ в словаре должен быть уникальным. При попытке добавить в словарь элемент с ключом, который уже существует в словаре, старое значение будет заменено на новое. Должны соответствовать протоколу Hashable: Это означает, что тип ключа должен иметь способность быть правильно хешированным. Большинство базовых типов Swift (например, String, Int, Double и др.) уже соответствуют Hashable, поэтому их можно использовать в качестве ключей без дополнительных усилий. 🚩Значения Могут быть любого типа: Значения в словаре могут быть любого типа, и они не обязаны соответствовать протоколу Hashable. Могут повторяться: Разные ключи могут иметь одинаковые значения. var personAge: [String: Int] = ["John": 30, "Sara": 25] 🚩Собственные типы в качестве ключей Вы также можете использовать собственные пользовательские типы в качестве ключей словаря, но для этого ваш тип должен соответствовать протоколу Hashable. Это включает в себя реализацию требуемых методов для сравнения на равенство (==) и хеширования (hash(into:)). struct Person: Hashable { var name: String var id: Int } var peopleDictionary: [Person: String] = [Person(name: "John", id: 1): "Engineer"] Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что лучше: closures или delegate? Зависит от ситуации. Делегаты лучше для долгоживущих однонаправленных связей (например, между контроллером и вью). Замыкания — для кратковременных, локальных задач (например, сетевые запросы, анимации). Делегаты лучше масштабируются, замыкания — лаконичнее. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Расскажи про две семантики в swift'е В Swift все типы данных делятся на два вида по семантике хранения и передачи: 🚩Значимая семантика (Value Semantics) Структуры (struct), перечисления (enum) и кортежи (tuple) передаются по значению, то есть каждое присваивание создаёт копию объекта. struct User { var name: String } var user1 = User(name: "Alice") var user2 = user1 // Копия! user2.name = "Bob" print(user1.name) // "Alice" (НЕ изменилось) print(user2.name) // "Bob" 🚩Ссылочная семантика (Reference Semantics) Классы (class), акторы (actor) и замыкания (closure) передаются по ссылке, то есть несколько переменных могут ссылаться на один и тот же объект. class User { var name: String init(name: String) { self.name = name } } var user1 = User(name: "Alice") var user2 = user1 // Передача ссылки! user2.name = "Bob" print(user1.name) // "Bob" (ИЗМЕНИЛОСЬ!) print(user2.name) // "Bob" Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что будет, если убрать опционал? 1. Удаление опционалов лишит язык возможности безопасно работать с отсутствием значений. 2. Программистам придётся вручную проверять наличие значений, что повысит вероятность ошибок и крашей. 3. Опционалы делают код более безопасным и читаемым, позволяя явно выражать ситуацию, когда значение может отсутствовать. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие есть фрейм ворк механизмы в айос для выполненной бэкраунд задач? В iOS для выполнения фоновых задач существуют несколько ключевых механизмов: 🚩Основные механизмы 🟠Grand Central Dispatch (GCD): Используется для асинхронного выполнения задач на глобальных или пользовательских очередях. DispatchQueue.global(qos: .background).async { // Фоновая задача } 🟠OperationQueue: Высокоуровневый API для управления очередями операций с возможностью указания зависимостей. let queue = OperationQueue() queue.addOperation { // Фоновая операция } 🟠Background Fetch: Позволяет приложению периодически загружать новые данные в фоновом режиме. func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { // Фоновое обновление данных completionHandler(.newData) } 🟠BGTaskScheduler: Новый фреймворк для планирования и выполнения фоновых задач. import BackgroundTasks func scheduleBackgroundTask() { let request = BGAppRefreshTaskRequest(identifier: "com.example.app.refresh") request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) try? BGTaskScheduler.shared.submit(request) } 🟠URLSession Background Transfers: Выполнение загрузки и выгрузки данных в фоновом режиме. let configuration = URLSessionConfiguration.background(withIdentifier: "com.example.app.background") let session = URLSession(configuration: configuration) let url = URL(string: "Ссылка скрыта let task = session.downloadTask(with: url) task.resume() Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Чем отличается set от dictionary? Set хранит уникальные элементы без порядка, а Dictionary — пары ключ-значение, где ключи уникальны. Set быстрее для операций проверки принадлежности и поиска. Dictionary удобен для поиска по ключу и хранения дополнительных данных для каждого ключа. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что будет, если открыть несколько экранов и сделать dismiss последнего? Когда вы открываете несколько экранов (UIViewController) в iOS, они обычно создают стек представлений (View Controller Stack). В зависимости от способа открытия экранов (модально или через навигационный стек), поведение dismiss будет разным. 🚩Модальное представление (`present`) Если экраны открывались модально (present), то dismiss на последнем экране просто закроет только этот экран, и управление вернётся к предыдущему. let newVC = UIViewController() present(newVC, animated: true) Позже вызываем: dismiss(animated: true) Если вызвать dismiss на первом модально представленном контроллере, все последующие модальные контроллеры закроются сразу. // Открываем два экрана последовательно let vc1 = UIViewController() let vc2 = UIViewController() present(vc1, animated: true) vc1.present(vc2, animated: true) Если вызвать dismiss на vc2: vc2.dismiss(animated: true) Если вызвать dismiss на vc1: vc1.dismiss(animated: true) 🚩Навигационный стек (`push`) Если экраны открывались через UINavigationController (pushViewController), то dismiss не работает для удаления последнего экрана. Нужно использовать popViewController. let vc1 = UIViewController() let vc2 = UIViewController() navigationController?.pushViewController(vc1, animated: true) navigationController?.pushViewController(vc2, animated: true) Теперь если мы вызовем: vc2.dismiss(animated: true) Правильный способ закрытия последнего экрана в UINavigationController: navigationController?.popViewController(animated: true) Если вы хотите закрыть весь стек экранов, используйте: navigationController?.popToRootViewController(animated: true) Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что происходит в системе, когда мы тапаем по экрану? Когда пользователь касается экрана, происходит следующий процесс: 1. Аппаратный слой (дисплей) фиксирует касание и передаёт его в iOS. 2. Система генерирует объект события (UIEvent, UITouch). 3. Событие передаётся в главное окно (UIWindow) и далее — вью-контроллерам и иерархии UIView. 4. Система запускает hit-testing — определяет, какая вьюшка находится под точкой касания. 5. Вызываются методы: - hitTest(_:with:) — определяет целевую вью. - touchesBegan(_:with:), touchesMoved, touchesEnded — передают событие в конкретную вью. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!