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

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

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

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

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

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

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

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

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

Описание

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

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

Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что под капотом стэка? Это абстрактная структура данных, работающая по принципу LIFO (Last In, First Out), что означает "последний пришёл — первый вышел". Это значит, что последний добавленный элемент будет первым при извлечении из стека. Под капотом реализации стека могут быть разные, и они зависят от конкретного языка программирования и задач, которые необходимо решить. 🟠Массивы Один из самых распространённых способов реализации стека — это использование массива. В такой реализации элементы стека хранятся в массиве, и индекс последнего элемента (вершина стека) отслеживается отдельной переменной. struct Stack { private var storage: [Element] = [] mutating func push(_ element: Element) { storage.append(element) } mutating func pop() -> Element? { return storage.popLast() } func peek() -> Element? { return storage.last } var isEmpty: Bool { return storage.isEmpty } } 🟠Связные списки Стек можно реализовать с использованием связных списков, где каждый элемент списка содержит данные и ссылку на следующий элемент в стеке. Вершина стека в такой реализации — это начало связного списка. class Node { var value: Element var next: Node? init(value: Element) { self.value = value } } struct Stack { private var head: Node? mutating func push(_ element: Element) { let node = Node(value: element) node.next = head head = node } mutating func pop() -> Element? { let node = head head = head?.next return node?.value } func peek() -> Element? { return head?.value } var isEmpty: Bool { return head == nil } } 🟠Стек вызовов Это системный стек, который используется во время выполнения программы для хранения информации о вызовах функций/методов. Он хранит адреса возврата, параметры функций, локальные переменные и другие данные, необходимые для управления вызовами функций и их возврата. 🚩Зачем он нужен? Обратную польскую нотацию для вычисления арифметических выражений. Управление вызовами функций в программном стеке. Поддержка операций undo в приложениях. Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что такое NSManagedObjectId, можем ли мы сохранить его на потом если приложение закроется? NSManagedObjectID – это уникальный идентификатор объекта в Core Data, который остаётся неизменным на протяжении всего жизненного цикла объекта. 🚩Как сохранить `NSManagedObjectID`? Используем uriRepresentation() – это строка (URL), которая уникально идентифицирует объект. func saveObjectID(_ object: NSManagedObject) { let objectID = object.objectID.uriRepresentation().absoluteString UserDefaults.standard.set(objectID, forKey: "savedObjectID") } 🚩Как восстановить объект по `NSManagedObjectID`? 1. Получаем URL из UserDefaults. 2. Преобразуем URL в NSManagedObjectID. 3. Загружаем объект из Core Data. func fetchSavedObjectID(context: NSManagedObjectContext) -> NSManagedObject? { guard let objectIDString = UserDefaults.standard.string(forKey: "savedObjectID"), let objectURL = URL(string: objectIDString) else { return nil } let objectID = context.persistentStoreCoordinator?.managedObjectID(forURIRepresentation: objectURL) if let objectID = objectID { return context.object(with: objectID) } return nil } Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Какая разница между Dependency Inversion и Dependency Injection? Dependency Inversion — это принцип, согласно которому высокоуровневые модули не должны зависеть от низкоуровневых напрямую, а через абстракции. Dependency Injection — это механизм, с помощью которого зависимости передаются извне, реализуя этот принцип. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как сравниваются значения в dictionary? В Swift словарь (`Dictionary`) – это неупорядоченная коллекция пар `ключ → значение`, где ключи уникальны. 🟠Сравнение двух словарей (`==`) Swift позволяет сравнивать два словаря по их ключам и значениям, если и ключи, и значения соответствуют протоколу Equatable. let dict1 = ["name": "Alice", "age": "25"] let dict2 = ["name": "Alice", "age": "25"] let dict3 = ["name": "Bob", "age": "30"] print(dict1 == dict2) // ✅ true (значения одинаковые) print(dict1 == dict3) // ❌ false (разные значения) Ошибка при сравнении Dictionary без Equatable Если значения не соответствуют `Equatable`, сравнение не сработает: struct User { let name: String } let dict1 = ["user": User(name: "Alice")] let dict2 = ["user": User(name: "Alice")] // Ошибка: Type 'User' does not conform to protocol 'Equatable' // print(dict1 == dict2) Решение: Сделать User Equatable: struct User: Equatable { let name: String } print(dict1 == dict2) // Теперь работает! 🟠Поиск и сравнение отдельных значений Можно сравнивать отдельные элементы по ключу. let dict = ["name": "Alice", "age": "25"] if dict["name"] == "Alice" { print("Имя совпадает") // ✅ } 🟠Сравнение по ключам (`keys`) и значениям (`values`) Можно сравнить только ключи или только значения. let dict1 = ["name": "Alice", "age": "25"] let dict2 = ["age": "30", "name": "Alice"] print(dict1.keys == dict2.keys) // ✅ true (ключи одинаковые) Сравнение значений print(Set(dict1.values) == Set(dict2.values)) // ✅ true (если порядок неважен) 🟠Сравнение словарей с разными типами (`Any`) Если словарь хранит Any, то прямое сравнение не сработает, и нужно сравнивать элементы вручную. let dict1: [String: Any] = ["name": "Alice", "age": 25] let dict2: [String: Any] = ["name": "Alice", "age": 25] // Функция сравнения словарей с `Any` func areDictionariesEqual(_ dict1: [String: Any], _ dict2: [String: Any]) -> Bool { return NSDictionary(dictionary: dict1).isEqual(to: dict2) } print(areDictionariesEqual(dict1, dict2)) // ✅ true Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Какие есть способы верстать? В iOS существует несколько способов вёрстки пользовательского интерфейса. Каждый из них имеет свои плюсы и минусы в зависимости от проекта. 🟠Interface Builder (Storyboard & XIB) Используется: визуальный редактор в Xcode. Storyboard - Позволяет создавать весь UI в одном файле .storyboard. - Поддерживает Auto Layout и Size Classes для адаптивного дизайна. - Можно настраивать Segue (переходы между экранами). 🟠Верстка кодом (без Storyboard) Используется: Полностью программная вёрстка без использования Interface Builder. let button = UIButton() button.setTitle("Нажми", for: .normal) button.translatesAutoresizingMaskIntoConstraints = false view.addSubview(button) NSLayoutConstraint.activate([ button.centerXAnchor.constraint(equalTo: view.centerXAnchor), button.centerYAnchor.constraint(equalTo: view.centerYAnchor) ]) 🟠SwiftUI – декларативный подход Используется: Современный способ верстки с декларативным синтаксисом. struct ContentView: View { var body: some View { VStack { Text("Привет, SwiftUI!") .font(.largeTitle) Button("Нажми меня") { print("Кнопка нажата") } } } } Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как можно создать любую переменную и записать туда любой тип данных? В Swift — через тип Any. Пример: var anything: Any = "string", потом anything = 42. Однако, чтобы использовать значение, нужно приведение типа (as?, as!). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что должны реализовывать переменные содержащиеся в протоколе? В Swift переменные (свойства), объявленные в протоколе, должны указывать: 🟠Только для чтения (`get`) Если свойство объявлено как { get }, класс или структура, реализующая протокол, должна предоставить как минимум геттер protocol Animal { var name: String { get } // Только чтение } struct Dog: Animal { let name = "Барсик" // Реализуем только get } let dog = Dog() print(dog.name) // "Барсик" Можно также использовать вычисляемое свойство: struct Cat: Animal { var name: String { return "Мурзик" } } 🟠Для чтения и записи (`get set`) Если свойство { get set }, класс или структура обязательно должны предоставить и get, и set. protocol Vehicle { var speed: Int { get set } // Чтение и запись } class Car: Vehicle { var speed: Int = 100 // Реализуем и get, и set } let car = Car() car.speed = 120 // Можно изменить значение print(car.speed) // 120 Вычисляемое свойство тоже подойдёт, если оно имеет get и set: class Bike: Vehicle { private var internalSpeed = 50 var speed: Int { get { return internalSpeed } set { internalSpeed = newValue } } } 🟠Статические свойства (`static`) Если свойство должно быть общим для всех экземпляров (не индивидуальным), то оно объявляется static. protocol Config { static var appVersion: String { get } } struct AppSettings: Config { static let appVersion = "1.0.0" } print(AppSettings.appVersion) // "1.0.0" Класс может использовать class var, если свойство можно переопределять в подклассах: class AppInfo: Config { class var appVersion: String { return "2.0.0" } } Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Есть ли в свифте множественное наследование? В Swift нет множественного наследования классов, но можно использовать множественное наследование через протоколы. 🚩Почему нет множественного наследования классов? Swift запрещает множественное наследование классов, потому что оно может привести к конфликтам и алмазной проблеме (diamond problem). Допустим, в языке с поддержкой множественного наследования у нас есть два родительских класса с одинаковым методом: class A { public: void greet() { cout
Swift | Вопросы собесов
Swift | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Расскажи про структуры Структуры (struct) – это один из основных типов данных в Swift. Они значимые (value type), то есть при передаче копируются, а не передаются по ссылке. 🚩Главные особенности `struct` Value type – при передаче копируется (в отличие от классов) Нет ARC (автоматического подсчета ссылок) – производительность выше Могут иметь методы, свойства, инициализаторы Работают с протоколами (protocol-oriented programming) Не поддерживают наследование 🚩Пример структуры struct Car { var model: String var year: Int func description() -> String { return "\(model) – \(year)" } } let car1 = Car(model: "Tesla", year: 2023) var car2 = car1 // Создается копия print(car1.description()) // Tesla – 2023 print(car2.description()) // Tesla – 2023 car2.year = 2024 // Изменяем car2, но car1 остается прежним print(car1.year) // 2023 print(car2.year) // 2024 🚩Мутируемые структуры (`mutating`) По умолчанию методы не могут изменять свойства структуры. Чтобы изменить их внутри метода, нужно использовать mutating struct Counter { var count = 0 mutating func increment() { count += 1 } } var counter = Counter() counter.increment() print(counter.count) // 1 Ставь 👍 и забирай 📚 Базу знаний
Swift | Вопросы собесов
Динамика подписчиков
+-0.6% за 30 дней
Текущие
2,148
Месяц назад
2,161
Средний рост
+0 / день
Обновлено
9 часов назад

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

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

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

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

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

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

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