Logo
TGCATALOG
Каталог Подборки Блог
Swift | Вопросы собесов

Swift | Вопросы собесов

Вопросы для собеседований по Swift, тесты и задачи для iOS-разработчиков в Telegram.

Нет оценок
626
29.10.2026
626
29.10.2026
Нет оценок
626
29.10.2026
Безопасный переход через бот
О канале

Вопросы для собеседований по Swift, тесты и задачи для iOS-разработчиков в Telegram.

Подписчиков 2,145
Тематика Технологии
Язык Русский
Ссылка t.me/easy_swift

Также рекомендуем

Kekaton AI | Озвучка и клон голоса
Kekaton AI | Озвучка и клон голоса
Бот

AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.

Описание

Канал посвящен подготовке к собеседованиям по языку Swift. Здесь собраны актуальные вопросы, тесты, практические задачи и информация о вакансиях. Идеально для начинающих и опытных iOS-разработчиков, желающих освежить знания и успешно пройти интервью.

Последние посты

Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что из себя представляет структура данных stack? Stack (стек) – это структура данных, работающая по принципу LIFO (Last In, First Out – "последним пришел, первым ушел"). 🚩Пример реализации стека в Swift В Swift нет встроенного стека (кроме Array), но можно создать свой: struct Stack { private var elements: [T] = [] mutating func push(_ item: T) { elements.append(item) } mutating func pop() -> T? { return elements.popLast() // Удаляет и возвращает верхний элемент } func peek() -> T? { return elements.last // Возвращает верхний элемент без удаления } func isEmpty() -> Bool { return elements.isEmpty } } // Пример использования: var stack = Stack() stack.push(10) stack.push(20) stack.push(30) print(stack.pop()!) // 30 print(stack.peek()!) // 20 print(stack.isEmpty()) // false 🚩Где используется стек? Обратный порядок выполнения (рекурсия) – стек вызовов функций. Алгоритмы (обратная польская нотация, DFS – поиск в глубину) История действий (назад-вперед в браузере, отмена в редакторе). Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как увеличить область нажатия на кнопку? Чтобы увеличить зону клика UIButton: 1. Создать кастомную кнопку и переопределить point(inside:with:) 2. Либо обернуть кнопку в UIView с большим frame, но маленькой кнопкой внутри. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Какие изменения надо сделать в constrait перед вызовом layout? Перед вызовом layoutIfNeeded() или layoutSubviews() в iOS-приложении, нужно изменить значение констрейнта и вызвать анимацию, если необходимо. Вот основные шаги: 🟠Обновление значения констрейнта Перед вызовом layoutIfNeeded(), измените свойство констрейнта (например, constant у NSLayoutConstraint). class ViewController: UIViewController { @IBOutlet weak var button: UIButton! @IBOutlet weak var heightConstraint: NSLayoutConstraint! override func viewDidLoad() { super.viewDidLoad() DispatchQueue.main.asyncAfter(deadline: .now() + 2) { self.changeButtonHeight() } } func changeButtonHeight() { heightConstraint.constant = 100 // Меняем значение констрейнта UIView.animate(withDuration: 0.3) { self.view.layoutIfNeeded() // Перестраиваем макет } } } 🟠Если меняется набор констрейнтов Если нужно удалить/добавить констрейнты, используйте `activate()` / `deactivate()`. var expanded = false @IBOutlet weak var smallHeightConstraint: NSLayoutConstraint! @IBOutlet weak var largeHeightConstraint: NSLayoutConstraint! func toggleHeight() { expanded.toggle() if expanded { NSLayoutConstraint.deactivate([smallHeightConstraint]) NSLayoutConstraint.activate([largeHeightConstraint]) } else { NSLayoutConstraint.deactivate([largeHeightConstraint]) NSLayoutConstraint.activate([smallHeightConstraint]) } UIView.animate(withDuration: 0.3) { self.view.layoutIfNeeded() } } 🟠Если работа идёт в `viewDidLoad()` Во viewDidLoad() элементы ещё не отрисованы, поэтому layoutIfNeeded() не сработает. Используйте viewDidAppear() или вызовите layoutIfNeeded() после view.layoutIfNeeded(). override func viewDidLoad() { super.viewDidLoad() heightConstraint.constant = 100 view.layoutIfNeeded() // НЕ обновит макет, потому что он ещё не загружен } Решение override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) heightConstraint.constant = 100 UIView.animate(withDuration: 0.3) { self.view.layoutIfNeeded() } } Разница между layoutIfNeeded() и setNeedsLayout() heightConstraint.constant = 100 view.setNeedsLayout() // Обновление произойдет на следующем цикле рендера Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как поменять иконку приложения в зависимости от среды? Для этого используют App Icon Sets, и в Info.plist можно указать набор иконок в зависимости от build-конфигурации. В Xcode можно также использовать xcconfig или Build Scheme, чтобы переключать иконки по окружению. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Какие есть инструменты для работы с потоками? В Swift есть несколько инструментов для работы с многопоточностью и параллельным выполнением кода. Вот основные из них: 🟠GCD (Grand Central Dispatch) – главный инструмент для потоков GCD – это низкоуровневая технология, позволяющая управлять задачами (тасками) в очередях (DispatchQueue). DispatchQueue.global(qos: .background).async { print("Фоновый поток") DispatchQueue.main.async { print("Вернулись в главный поток") } } 🟠OperationQueue – более удобный API для задач OperationQueue – это более гибкая и объектно-ориентированная альтернатива GCD. let queue = OperationQueue() queue.maxConcurrentOperationCount = 2 // Ограничение на 2 задачи одновременно queue.addOperation { print("Операция 1") } queue.addOperation { print("Операция 2") } 🟠Actors – безопасная работа с потоками в Swift 5.5+ С actor можно работать с потоками без гонок данных, потому что все его свойства защищены от одновременного доступа. actor Counter { private var value = 0 func increment() { value += 1 } func getValue() -> Int { return value } } let counter = Counter() Task { await counter.increment() print(await counter.getValue()) // Потокобезопасный доступ } 🟠Task & Async/Await (Swift 5.5+) – современный подход к асинхронности С async/await код становится читаемым и удобным. func fetchData() async -> String { try? await Task.sleep(nanoseconds: 1_000_000_000) // 1 секунда задержки return "Данные загружены" } Task { let result = await fetchData() print(result) } Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Какие методы борьбы есть против коллизии? Существует несколько способов разрешения коллизий: 1. Открытая адресация (open addressing) — поиск следующей свободной ячейки по определенному правилу (линейный, квадратичный пробинг). 2. Цепочки (chaining) — элементы с одинаковым хэшем хранятся в связном списке (или массиве) внутри корзины. 3. Двойное хеширование — используется вторичная хэш-функция для расчета смещения. 4. Динамическое увеличение размера таблицы (rehashing) — при увеличении нагрузки пересчитываются хэши с новым размером. Swift использует цепочки и перехэширование. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Расскажи про классы Классы — это ссылочные типы в Swift, которые позволяют создавать объекты с общими свойствами и методами. Они поддерживают наследование, работают с ARC (Automatic Reference Counting) и хранятся в куче (heap). 🚩Основные характеристики классов 🟠Ссылочный тип Когда вы присваиваете класс другой переменной, копируется не сам объект, а ссылка на него. Изменения, сделанные через одну ссылку, затронут и другие. 🟠Хранятся в куче В отличие от структур, которые хранятся в стеке, классы создают объекты в куче. Это позволяет передавать объекты между функциями без копирования. 🟠Automatic Reference Counting (ARC) Swift использует ARC для управления памятью. Объект удаляется из памяти, когда на него больше нет ссылок. 🟠Наследование В отличие от структур, классы могут наследовать свойства и методы от других классов. Поддерживают переопределение методов (override). 🟠Идентичность объектов Два объекта класса можно сравнивать по ссылке (===), а не только по значению (==). class Animal { var name: String init(name: String) { self.name = name } func speak() { print("Some sound") } } class Dog: Animal { override func speak() { print("Woof!") } } let dog1 = Dog(name: "Buddy") let dog2 = dog1 // Копируется ссылка, а не объект dog2.name = "Charlie" print(dog1.name) // "Charlie", так как dog1 и dog2 указывают на один объект Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как протоколы реализуют код? Протоколы в iOS задают интерфейс, который может быть реализован классами, структурами или перечислениями. Они не содержат реализацию, но можно использовать протоколы с расширениями (protocol extension), чтобы добавить стандартное поведение. Протоколы обеспечивают гибкость и модульность. Это позволяет разделять ответственность и переиспользовать код. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Надо ли отслеживать статус задачи в dispatchworkitem? Да, отслеживание статуса задачи в DispatchWorkItem может быть полезным, но это зависит от требований приложения. 🟠Когда это полезно? Если задача может быть отменена (cancel()) Если выполнение задачи можно приостановить или продолжить Если нужно проверить завершение перед выполнением следующего действия* let workItem = DispatchWorkItem { print("Задача выполняется") } // Запускаем задачу DispatchQueue.global().async(execute: workItem) // Отмена перед выполнением workItem.cancel() // Проверяем статус выполнения if workItem.isCancelled { print("Задача отменена") } else { print("Задача выполнена") } 🟠Можно ли проверить, завершена ли задача? В DispatchWorkItem нет метода проверки завершения. Но можно вручную отслеживать завершение с помощью notify: let workItem = DispatchWorkItem { print("Задача выполняется") } // Сообщаем о завершении workItem.notify(queue: .main) { print("Задача завершена") } DispatchQueue.global().async(execute: workItem) 🟠Надо ли всегда отслеживать статус? Если задача короткая и простая → НЕ ОБЯЗАТЕЛЬНО. Если задача важная, может быть отменена или зависит от других задач → ЛУЧШЕ ОТСЛЕЖИВАТЬ. Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Динамика подписчиков
+-0.7% за 30 дней
Текущие
2,145
Месяц назад
2,161
Средний рост
+-1 / день
Обновлено
16 часов назад

Отзывы о канале Swift | Вопросы собесов

Авторизуйтесь, чтобы оставить отзыв

Только зарегистрированные пользователи могут делиться своим мнением.

Пока нет отзывов

Станьте первым, кто поделится своим впечатлением об этом ресурсе!

Похожие ресурсы

Loading
Переход на светлую тему
Главная Каталог Подборки Блог Вход