Swift | Вопросы собесов
2.13K subscribers
28 photos
951 links
Download Telegram
🤔 Какими методами жизненного цикла пользовался?

🟠application(_:didFinishLaunchingWithOptions:)
Вызывается при запуске приложения, для начальной настройки.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}


🟠applicationDidBecomeActive(_:)
Когда приложение становится активным.
func applicationDidBecomeActive(_ application: UIApplication) {
// Восстановление задач
}


🟠applicationWillResignActive(_:)
Когда приложение станет неактивным.
func applicationWillResignActive(_ application: UIApplication) {
// Приостановка задач
}


🟠applicationDidEnterBackground(_:)
Когда приложение уходит в фоновый режим.
func applicationDidEnterBackground(_ application: UIApplication) {
// Сохранение данных
}


🟠applicationWillEnterForeground(_:)
Когда приложение возвращается на передний план.
func applicationWillEnterForeground(_ application: UIApplication) {
// Подготовка к возвращению
}


🟠applicationWillTerminate(_:)
Когда приложение завершает работу.
func applicationWillTerminate(_ application: UIApplication) {
// Завершение задач
}


🚩Жизненный цикл представления (UIViewController)

🟠viewDidLoad()
Вызывается после загрузки представления.
override func viewDidLoad() {
super.viewDidLoad()
// Настройка интерфейса
}


🟠viewWillAppear(_:)
Перед тем, как представление станет видимым.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Обновление данных
}


🟠viewDidAppear(_:)
После того, как представление стало видимым.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Запуск задач
}


🟠viewWillDisappear(_:)
Перед тем, как представление станет невидимым.
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Сохранение данных
}


🟠viewDidDisappear(_:)
После того, как представление стало невидимым.
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Освобождение ресурсов
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как будут реализованы опциональные функции в протоколах?

Опциональные функции реализуются как необязательные: их можно либо реализовать, либо игнорировать. Если функция не реализована, вызов такой функции будет просто проигнорирован без ошибок.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что есть wrapped?

В Swift, термин "wrapped" обычно используется в контексте "обёрнутых" значений, особенно связанных с опционалами и декораторами.

🚩Опционалы

В Swift опционалы (Optionals) позволяют переменной принимать либо значение определенного типа, либо значение nil. Опционалы "оборачивают" значение, указывая, что переменная может не содержать значения вовсе.
var name: String? = "Alex"


Принудительное разворачивание (force unwrapping)
if name != nil {
print(name!) // Использование "!" для принудительного разворачивания
}


Безопасное разворачивание (optional binding)
if let unwrappedName = name {
print(unwrappedName)
}


🚩Property Wrappers (Обёртки свойств)

Property Wrappers — это механизм, позволяющий добавлять поведение к свойствам классов и структур.
@propertyWrapper
struct Uppercased {
private var value: String = ""
var wrappedValue: String {
get { value }
set { value = newValue.uppercased() }
}
}

struct User {
@Uppercased var username: String
}

var user = User(username: "alex")
print(user.username) // Выведет "ALEX"


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Чем коллекции отличаются от массивов?

Размер: массивы имеют фиксированный размер, тогда как коллекции (например, списки) динамически изменяются.
Тип данных: массивы содержат элементы одного типа, а коллекции могут быть обобщёнными (Generic).
Функциональность: массивы предоставляют базовый доступ по индексу, тогда как коллекции предлагают методы для сортировки, фильтрации и поиска.
Структура: массивы — линейные, коллекции включают списки, множества, словари и другие сложные структуры.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 Что такое scapin?

В контексте iOS и Swift, термин "scapin" не является общепринятым или стандартным. Возможно, вы имели в виду что-то другое. Могу предположить, что это опечатка или автокоррекция какого-то другого термина. Если у вас есть дополнительная информация или контекст, пожалуйста, поделитесь, чтобы я мог точнее ответить на ваш вопрос.

🚩Escaping Closures

В Swift замыкания (closures) могут быть обозначены как "escaping" или "не escaping". Это важно для управления временем жизни и областью видимости замыкания.

🟠Non-escaping Closures
По умолчанию замыкания не "escaping", что означает, что они должны быть выполнены до выхода из функции, в которую они переданы. Такой тип замыканий позволяет компилятору проводить более агрессивные оптимизации.
   func performAction(closure: () -> Void) {
closure()
}


🟠Escaping Closures
Замыкания, помеченные как @escaping, могут быть выполнены после выхода из функции, в которую они переданы. Это необходимо, когда замыкание сохраняется и вызывается позже, например, асинхронно.
   func performActionWithEscaping(closure: @escaping () -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
closure()
}
}


🚩Scoping

Область видимости (scope) определяет, где переменные и константы могут быть доступны в коде. В Swift существуют различные области видимости:

🟠Локальная область видимости
Переменные, объявленные внутри функции или блока кода, доступны только в пределах этого блока.
   func exampleFunction() {
let localVariable = "I am local"
print(localVariable)
}


🟠Область видимости экземпляра
Переменные, объявленные внутри класса или структуры, доступны для всех методов и свойств этого класса или структуры.
   class ExampleClass {
var instanceVariable = "I am an instance variable"

func printInstanceVariable() {
print(instanceVariable)
}
}


🟠Глобальная область видимости
Переменные, объявленные вне всех функций, классов и структур, доступны в любом месте в файле.
   let globalVariable = "I am global"

func printGlobalVariable() {
print(globalVariable)
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21🤔21
🤔 Enum относится к value type?

Да, enum (перечисление) относится к value type. Это значит, что при передаче или копировании экземпляра enum создаётся его новая копия. Такие типы работают по механизму "по значению", а не "по ссылке", что обеспечивает независимость копий друг от друга.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🤔 Что такое GSD?

Это термин, используемый для описания процесса разработки программного обеспечения, который осуществляется командами, распределёнными по всему миру. В таких командах разработчики, тестировщики, менеджеры проектов и другие участники могут находиться в разных странах и работать в разных часовых поясах.

🚩Основные особенности

🟠Глобальное распределение команды
Команды могут состоять из участников, работающих в разных географических регионах. Это позволяет привлекать таланты со всего мира и использовать временные зоны для круглосуточной работы.

🟠Различия в культуре и языке
Работа в глобальных командах требует понимания и уважения к культурным различиям и языковым барьерам. Это может влиять на коммуникацию и взаимодействие внутри команды.

🟠Технологические и организационные инструменты
Для эффективного управления глобальными командами используются различные инструменты, такие как системы управления проектами (например, Jira, Trello), платформы для совместной работы (например, Slack, Microsoft Teams), системы контроля версий (например, GitHub, GitLab) и другие.

🟠Временные зоны
Работа в разных часовых поясах может быть как преимуществом, так и вызовом. Важно организовать работу так, чтобы минимизировать время ожидания и использовать разницу во времени для повышения эффективности.

🟠Методы управления проектами
В GSD часто используются гибкие методы управления проектами, такие как Agile или Scrum, которые позволяют адаптироваться к быстро меняющимся требованиям и обеспечивать регулярную доставку программного обеспечения.

🚩Плюсы и вызовы

Доступ к глобальному пулу талантов
Возможность привлекать специалистов из разных стран.
Круглосуточная разработка
За счёт работы в разных часовых поясах проекты могут продвигаться круглосуточно.
Снижение затрат
Возможность оптимизации затрат за счёт найма специалистов в регионах с более низкими ставками.

🟠Коммуникационные барьеры
Различия в языке и культуре могут усложнять взаимодействие.

🟠Управление временем
Организация работы с учётом разных часовых поясов требует тщательного планирования.

🟠Интеграция и координация
Сложности в координации работы между удалёнными командами.

🚩Пример использования

Предположим, крупная международная компания разрабатывает новое программное обеспечение. Команда разработчиков из США работает над основным функционалом, тестировщики из Индии занимаются тестированием, а команда из Европы отвечает за проектирование пользовательского интерфейса. Каждая команда выполняет свою часть работы и взаимодействует с другими командами с помощью инструментов для совместной работы и регулярных видеоконференций.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯5😁1
🤔 Что в extension можно добавить, кроме функции?

Можно добавить:
1. Свойства (только вычисляемые).
2. Инициализаторы.
3. Поддержку протоколов.
4. Вложенные типы (структуры, классы, перечисления).
5. Сабскрипты.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какие инструменты есть у GSD?

В глобальной разработке программного обеспечения (GSD) используются различные инструменты для управления проектами, коммуникации, совместной работы, контроля версий и автоматизации.

🚩Инструменты для управления проектами

🟠Jira
Разработан Atlassian. Используется для управления проектами, отслеживания задач и ошибок. Поддерживает методологии Agile и Scrum. Имеет гибкую систему настраиваемых досок и отчетов.

🟠Trello
Визуальная система управления проектами на основе досок Kanban. Легкость в использовании и наглядность. Подходит для небольших команд и простых проектов.

🟠Asana
Инструмент для управления задачами и проектами. Поддерживает список задач, проекты и временные линии. Интеграции с различными другими инструментами.

🚩Инструменты для совместной работы и коммуникации

🟠Slack
Платформа для мгновенных сообщений и групповых чатов. Поддержка каналов, тем и интеграций с другими сервисами. Возможность обмена файлами и организация видеозвонков.

🟠Microsoft Teams
Инструмент для общения и совместной работы от Microsoft. Поддержка чатов, видеоконференций и совместного редактирования документов. Интеграция с Microsoft Office 365.

🟠Zoom
Платформа для видеоконференций. Поддерживает большие встречи и вебинары. Возможности записи встреч и обмена экранами.

🚩Системы контроля версий

🟠GitHub
Платформа для хостинга и совместной работы над проектами на основе Git. Поддержка pull request'ов, issue tracker и Actions для автоматизации. Широко используется в open-source и коммерческих проектах.

🟠GitLab
Платформа для хостинга Git-репозиториев с дополнительными функциями CI/CD. Поддерживает полный жизненный цикл разработки программного обеспечения. Возможность хостинга на собственных серверах.

🟠Bitbucket
Система управления исходным кодом, разработанная Atlassian. Интеграция с Jira и другими инструментами Atlassian. Поддержка Git и Mercurial.

🚩Инструменты для автоматизации и CI/CD

🟠Jenkins
Инструмент для автоматизации сборки, тестирования и деплоя. Поддержка различных плагинов для интеграции с другими инструментами. Открытый исходный код и большая пользовательская база.

🟠CircleCI
Платформа для непрерывной интеграции и непрерывного деплоя. Поддержка контейнеров и различных языков программирования. Возможности автоматизации на основе YAML-конфигураций.

🟠Travis CI
Инструмент для CI/CD, интегрирующийся с GitHub. Автоматическая сборка и тестирование кода при каждом коммите. Поддержка различных языков и платформ.

🚩Инструменты для документирования и хранения знаний

🟠Confluence
Инструмент для создания и совместного редактирования документации. Интеграция с Jira и другими продуктами Atlassian. Поддержка организации информации в виде вики-страниц.

🟠Notion
Многофункциональный инструмент для ведения заметок, управления задачами и создания документации. Поддержка различных типов контента и интеграций. Используется для личных и командных нужд.

🟠Google Workspace (Google Docs, Sheets, Slides)
Набор инструментов для совместной работы над документами, таблицами и презентациями. Реальное время редактирования и комментарии. Интеграция с другими сервисами Google.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8
🤔 Какие инициализаторы можно добавить в extension?

Можно добавлять только новые инициализаторы, но не переопределять существующие. В структуре или классе можно добавить как обычные, так и convenience инициализаторы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🤔 Как в IOS реализовать список с большим набором ячеек?

В iOS для работы с большими наборами данных в виде списков часто используются UITableView и UICollectionView. Эти компоненты эффективно обрабатывают и отображают большие объемы данных за счёт повторного использования ячеек.

🚩Реализация `UITableView` с большим набором ячеек

🟠Создание проекта и настройка интерфейса
Создайте новый проект в Xcode. Добавьте UITableView в ваш ViewController через Interface Builder или программно.

🟠Настройка `UITableView`
Создайте аутлет для таблицы в вашем ViewController. Назначьте ViewController в качестве делегата и источника данных для таблицы.
   import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
}

// MARK: - UITableViewDataSource

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1000 // Большое количество ячеек
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Row \(indexPath.row)"
return cell
}
}


🟠Оптимизация с помощью повторного использования ячеек
Используйте метод dequeueReusableCell(withIdentifier:for:) для повторного использования ячеек, что улучшает производительность.
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "Row \(indexPath.row)"
return cell
}


🚩Пример использования `UICollectionView`

Создание и настройка `UICollectionView`
Добавьте UICollectionView в ваш ViewController. Создайте аутлет для коллекции и настройте делегата и источник данных.
   import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")
}

// MARK: - UICollectionViewDataSource

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 1000 // Большое количество элементов
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
cell.backgroundColor = .blue
return cell
}

// MARK: - UICollectionViewDelegateFlowLayout

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 100, height: 100) // Размер ячеек
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 Можно добавить структуру в extension?

Да, можно добавлять вложенные типы, такие как структуры, классы или перечисления. Это полезно для организации кода и создания вспомогательных типов.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое View (представление) и что такое window?

В iOS разработке термины "View" (представление) и "Window" (окно) имеют разные значения и играют различные роли в пользовательском интерфейсе.

🚩View (Представление)

Это базовый строительный блок для построения пользовательского интерфейса в iOS. Представления ответственны за отрисовку контента на экране и обработку взаимодействий с пользователем, таких как касания, жесты и т.д.

🟠Рендеринг контента
Представления отвечают за отображение графики, текста, изображений и других визуальных элементов.

🟠Иерархия представлений
Представления могут содержать другие представления, образуя иерархию. Главное представление в иерархии называется супервью (superview), а представления, вложенные в него, — подпредставления (subviews).

🟠События и взаимодействия
Представления обрабатывают пользовательские события, такие как касания и жесты.

🟠Макет и компоновка
UIView и его подклассы отвечают за управление расположением и размером визуальных элементов.

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.backgroundColor = .red

let subview = UIView(frame: CGRect(x: 10, y: 10, width: 50, height: 50))
subview.backgroundColor = .blue

view.addSubview(subview)


🚩Window (Окно)

Это специальный тип представления, который служит контейнером для всех других представлений в приложении. UIWindow представляет собой основу, на которой строится весь пользовательский интерфейс приложения.

🟠Корневое представление
UIWindow содержит корневое представление (root view), которое в свою очередь может содержать другие представления.

🟠Управление отображением
Окно управляет отображением содержимого на экране и взаимодействием с системными событиями.

🟠Многооконные приложения
Хотя обычно в приложении используется одно основное окно, UIWindow позволяет создавать и управлять несколькими окнами, что может быть полезно для реализации сложных интерфейсов, таких как многооконные приложения на iPad.

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let viewController = UIViewController()
viewController.view.backgroundColor = .white
window?.rootViewController = viewController
window?.makeKeyAndVisible()
return true
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Как опциональный тип реализован под капотом?

Опциональный тип (Optional) в Swift реализован как перечисление (enum) с двумя случаями:
1. some: хранит значение, если оно присутствует.
2. none: обозначает отсутствие значения, эквивалент nil.
Под капотом это работает как обёртка над значением, где используется дополнительный бит для указания на наличие или отсутствие данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41
🤔 Каково разрешение экранов iphon'ов?

Разрешение экранов iPhone варьируется в зависимости от модели. Вот основные модели iPhone с их разрешениями экранов (в пикселях):

🟠iPhone SE (1-го поколения)
Разрешение: 1136 x 640
Размер экрана: 4.0 дюйма
Плотность пикселей: 326 ppi

🟠iPhone 6, 6s, 7, 8
Разрешение: 1334 x 750
Размер экрана: 4.7 дюйма
Плотность пикселей: 326 ppi

🟠iPhone 6 Plus, 6s Plus, 7 Plus, 8 Plus
Разрешение: 1920 x 1080
Размер экрана: 5.5 дюймов
Плотность пикселей: 401 ppi

🟠iPhone X, XS, 11 Pro
Разрешение: 2436 x 1125
Размер экрана: 5.8 дюйма
Плотность пикселей: 458 ppi

🟠iPhone XR, 11
Разрешение: 1792 x 828
Размер экрана: 6.1 дюйм
Плотность пикселей: 326 ppi

🟠iPhone XS Max, 11 Pro Max
Разрешение: 2688 x 1242
Размер экрана: 6.5 дюймов
Плотность пикселей: 458 ppi

🟠iPhone 12 mini
Разрешение: 2340 x 1080
Размер экрана: 5.4 дюйма
Плотность пикселей: 476 ppi

🟠iPhone 12, 12 Pro
Разрешение: 2532 x 1170
Размер экрана: 6.1 дюйм
Плотность пикселей: 460 ppi

🟠iPhone 12 Pro Max
Разрешение: 2778 x 1284
Размер экрана: 6.7 дюймов
Плотность пикселей: 458 ppi

🟠iPhone 13 mini
Разрешение: 2340 x 1080
Размер экрана: 5.4 дюйма
Плотность пикселей: 476 ppi

🟠iPhone 13, 13 Pro
Разрешение: 2532 x 1170
Размер экрана: 6.1 дюйм
Плотность пикселей: 460 ppi

🟠iPhone 13 Pro Max
Разрешение: 2778 x 1284
Размер экрана: 6.7 дюймов
Плотность пикселей: 458 ppi

🟠iPhone 14, 14 Pro
Разрешение: 2556 x 1179
Размер экрана: 6.1 дюйм
Плотность пикселей: 460 ppi

🟠iPhone 14 Pro Max
Разрешение: 2796 x 1290
Размер экрана: 6.7 дюймов
Плотность пикселей: 460 ppi

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3👍1
🤔 Можно ли сделать так, чтобы отменилась операция во время выполнения в GCD?

Нет, задачи в GCD (Grand Central Dispatch) нельзя отменить после их выполнения.
1. Однако можно использовать диспетчерские источники (dispatch sources) или проверять флаг отмены до выполнения операции.
2. Для более сложного управления используйте OperationQueue, где задачи можно отменять до их начала.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 В чем разница между points (точками) и пикселями (pixels)?

Разница между точками (points) и пикселями (pixels) в iOS важна для понимания разрешения экрана и отображения графики.

🚩Пиксели (Pixels)

🟠Что это
Пиксели — это мельчайшие единицы изображения на экране. Каждый пиксель представляет собой одну точку цвета на дисплее.
🟠Физическое представление
Пиксели — это физические элементы на экране устройства.
🟠Измерение разрешения экрана
Разрешение экрана указывается в пикселях (например, 1920 x 1080).

🚩Точки (Points)

🟠Что это
Точки — это логические единицы измерения, используемые в iOS для упрощения разработки интерфейсов. Они абстрагируются от физического разрешения экрана.

🟠Логическое представление
Точки позволяют дизайнерам и разработчикам создавать интерфейсы, которые будут одинаково хорошо выглядеть на устройствах с разным физическим разрешением.

🟠Измерение интерфейсов
Размеры и положения элементов интерфейса указываются в точках (например, 100 x 100 points).

🚩Коэффициент масштабирования (Scale Factor)

Коэффициент масштабирования (scale factor) определяет соотношение между точками и пикселями. Он показывает, сколько физических пикселей соответствует одной точке. Например:

🟠Стандартный дисплей (1x)
1 точка = 1 пиксель.
🟠Retina дисплей (2x)
1 точка = 2 пикселя.
🟠Super Retina дисплей (3x)
1 точка = 3 пикселя.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 Какие есть примитивы в GCD?

1. Очереди (Dispatch Queues): serial (последовательные) и concurrent (параллельные).
2. Группы (Dispatch Groups): позволяют объединять задачи для синхронизации их выполнения.
3. Семафоры (Dispatch Semaphores): обеспечивают ограничение доступа к ресурсам.
4. Таймеры (Dispatch Timers): планирование периодических задач.
5. Барьеры (Dispatch Barriers): для управления конкурентными операциями.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🤔 Что означают IBOutlet и IBAction, для чего они нужны, и что значат для препроцессора?

Это атрибуты, используемые в разработке приложений на iOS для связывания элементов пользовательского интерфейса в Interface Builder с кодом на Swift или Objective-C. Они играют ключевую роль в интеграции визуального интерфейса и логики приложения.

🟠IBOutlet

Используется для создания соединений между элементами пользовательского интерфейса (например, кнопками, метками, таблицами и т.д.) в Interface Builder и свойствами в коде. Это позволяет вам программно взаимодействовать с этими элементами.

🚩Зачем это нужно

🟠Связывание UI элементов
Позволяет связывать визуальные элементы с кодом, чтобы можно было программно изменять их свойства (например, текст, цвет, размеры).
🟠Управление элементами интерфейса
Можно управлять состоянием и поведением элементов интерфейса из кода.

import UIKit

class ViewController: UIViewController {

// Связь кнопки с кодом
@IBOutlet weak var myButton: UIButton!

override func viewDidLoad() {
super.viewDidLoad()
// Изменение свойств кнопки программно
myButton.setTitle("Нажми меня", for: .normal)
}
}


🚩IBAction

Используется для создания методов, которые будут вызваны в ответ на действия пользователя (например, нажатие кнопки, переключение переключателя и т.д.) в Interface Builder. Это позволяет вам определять логику обработки событий.

🚩Зачем это нужно

🟠Обработка событий
Позволяет связывать действия пользователя с методами в коде.
🟠Реализация логики
Можно программировать логику, которая будет выполняться при взаимодействии с элементами интерфейса.

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var myButton: UIButton!

override func viewDidLoad() {
super.viewDidLoad()
myButton.setTitle("Нажми меня", for: .normal)
}

// Метод, который будет вызван при нажатии на кнопку
@IBAction func buttonTapped(_ sender: UIButton) {
print("Кнопка была нажата")
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
2