Optional Binding
Optional Binding позволяет проверить, содержит ли опционал .some-значение. Если содержит, извлекает его и предоставляет к нему доступ с помощью локальной переменной (обычно константной). Optional Binding работает в контексте конструкций if, while и guard. Если опционал в состоянии nil, запускается блок else.
Optional Binding позволяет проверить, содержит ли опционал .some-значение. Если содержит, извлекает его и предоставляет к нему доступ с помощью локальной переменной (обычно константной). Optional Binding работает в контексте конструкций if, while и guard. Если опционал в состоянии nil, запускается блок else.
👍7
Для чего нужны closures (замыкания) в Swift и как с ними работать?
📖 Замыкания - это мощная концепция, которая позволяет использовать множество различных шаблонов программирования.
Однако для многих начинающих программистов closures могут быть сложными в понимании и дальнейшем использовании.
Это особенно верно, когда замыкания используются в асинхронном контексте.
Например, когда они используются в качестве completion handlers или передаются в приложении, чтобы их можно было вызвать позже.
В своём посте автор объясняет, что такое замыкания в Swift, как они работают и, самое главное, показывает различные примеры замыканий с возрастающей сложностью.
В этой заметки автор обещает объяснить всё, что необходимо знать для эффективного использования замыканий в приложении.
📖 Замыкания - это мощная концепция, которая позволяет использовать множество различных шаблонов программирования.
Однако для многих начинающих программистов closures могут быть сложными в понимании и дальнейшем использовании.
Это особенно верно, когда замыкания используются в асинхронном контексте.
Например, когда они используются в качестве completion handlers или передаются в приложении, чтобы их можно было вызвать позже.
В своём посте автор объясняет, что такое замыкания в Swift, как они работают и, самое главное, показывает различные примеры замыканий с возрастающей сложностью.
В этой заметки автор обещает объяснить всё, что необходимо знать для эффективного использования замыканий в приложении.
👍11
Параметры In-Out
В Swift аргументы функции – константы. В результате этого невозможно изменить значение параметра, которое передается в функцию. Параметр in-out позволяет функции переназначить значение переменной. Для этого параметр помечается inout, используется & при передаче параметра в вызов функции.
В Swift аргументы функции – константы. В результате этого невозможно изменить значение параметра, которое передается в функцию. Параметр in-out позволяет функции переназначить значение переменной. Для этого параметр помечается inout, используется & при передаче параметра в вызов функции.
🔥14👍1
Проверяем, сколько раз символ встречается в строке
Если вам надо выяснить, сколько раз в строке встречается символ, то смотрите видео ниже. В нем рассматривают два способа решения такой задачи.
👀Смотреть видео
Если вам надо выяснить, сколько раз в строке встречается символ, то смотрите видео ниже. В нем рассматривают два способа решения такой задачи.
👀Смотреть видео
👍9
Вариативные параметры
Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
👍8🤯2
Grand Central Dispatch
Dispatch, больше известный как GCD – фреймворк, содержащий в себе языковые конструкции, позволяющие нам комфортно и достаточно просто управлять потоками, задачами для выполнения и ресурсами, которые нам необходимо захватить. GCD работает на системном уровне, таким образом он может удовлетворить потребности всех запущенных приложений на девайсе, при этом управляя ресурсами эффективно.
GCD реализован на языке C, поэтому фактически является низкоуровневым фреймворком.
Queue
Queue (очередь) – является основным примитивом GCD. Очередь представляет собой сущность, выполняющую задачи, поступающие на вход, на одном или множестве потоков. Представьте себе очередь на кассу в любом продуктовом магазине. В данном случае касса, которая вас обслужит – это поток, вы – сама задача, а все вместе – очередь.
Очередь работает по принципу FIFO, таким образом первая задача на очереди будет первой направлена на выполнение на потоке.
Dispatch, больше известный как GCD – фреймворк, содержащий в себе языковые конструкции, позволяющие нам комфортно и достаточно просто управлять потоками, задачами для выполнения и ресурсами, которые нам необходимо захватить. GCD работает на системном уровне, таким образом он может удовлетворить потребности всех запущенных приложений на девайсе, при этом управляя ресурсами эффективно.
GCD реализован на языке C, поэтому фактически является низкоуровневым фреймворком.
Queue
Queue (очередь) – является основным примитивом GCD. Очередь представляет собой сущность, выполняющую задачи, поступающие на вход, на одном или множестве потоков. Представьте себе очередь на кассу в любом продуктовом магазине. В данном случае касса, которая вас обслужит – это поток, вы – сама задача, а все вместе – очередь.
Очередь работает по принципу FIFO, таким образом первая задача на очереди будет первой направлена на выполнение на потоке.
👍9🔥2
Есть много споров антипаттер ли одиночка или нет. Юзать его — ваша ответственность. Критично же юзать и не знать какие риски на себя берешь. Поэтому вкратце:
1. Синглтон нарушает SRP (Single Responsibility Principle) — класс синглтона, помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров.
2. Глобальное состояние. Про вред глобальных переменных вроде бы уже все знают, но тут та же самая проблема. Когда мы получаем доступ к экземпляру класса, мы не знаем текущее состояние этого класса, и кто и когда его менял, и это состояние может быть вовсе не таким, как ожидается.
есть неплохая статья, которая описывает все риски использования синглотона и его альтернативы
https://habr.com/ru/company/vk/blog/334078/
1. Синглтон нарушает SRP (Single Responsibility Principle) — класс синглтона, помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров.
2. Глобальное состояние. Про вред глобальных переменных вроде бы уже все знают, но тут та же самая проблема. Когда мы получаем доступ к экземпляру класса, мы не знаем текущее состояние этого класса, и кто и когда его менял, и это состояние может быть вовсе не таким, как ожидается.
есть неплохая статья, которая описывает все риски использования синглотона и его альтернативы
https://habr.com/ru/company/vk/blog/334078/
🔥6
Вариативные параметры
Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
👍8
Clean Architecture и MVVM в iOS: пример реализации проекта
При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны.
Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.
📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.
🛠 Проект на Github, который может быть использован в качестве шаблона.
При разработке программного обеспечения важно использовать не только паттерны проектирования, но и архитектурные паттерны.
Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.
📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.
🛠 Проект на Github, который может быть использован в качестве шаблона.
🔥8
Крутая статья про Архитектуры.
Каждый из нас всегда хоть раз задумывался, а по какой архитектуре я буду писать своё приложение? Каких принципов я буду придерживаться?
Держите, архитекторы.
https://habr.com/ru/company/badoo/blog/281162/
Каждый из нас всегда хоть раз задумывался, а по какой архитектуре я буду писать своё приложение? Каких принципов я буду придерживаться?
Держите, архитекторы.
https://habr.com/ru/company/badoo/blog/281162/
Хабр
Архитектурные паттерны в iOS
Введение в MVP, MVC, MVVM и VIPER. Что между ними общего и в чем разница. Делаете все по MVC, а получается некрасиво? Сомневаетесь, переходить ли на MVVM? Слыша...
👍12
Для тех кто хочет разобраться в VIP архитектуре, таблицах, ячейках и коллекциях - советую просмотр данного видеоролика!
https://www.youtube.com/watch?v=O6Y78yTMzrs
https://www.youtube.com/watch?v=O6Y78yTMzrs
YouTube
Легкий способ войти в iOS. Clean Swift [RU] / Мобильный разработчик
Всем привет, продолжаем разбираться как работает iOS. Сегодня будем разбираться с архитектурными подходами. Как это устроено в iOS и я хотел бы показать одну из самых эффективных на мой взгляд архитектур для iOS приложений - Clean Swift
Напоминаю, что видео…
Напоминаю, что видео…
👍6
🗺📱Дорожная карта iOS Developer 2022
Будет полезно начинающим, которые самостоятельно изучают язык, чтобы составить свою, наиболее эффективную стратегию на основе best practices
Будет полезно начинающим, которые самостоятельно изучают язык, чтобы составить свою, наиболее эффективную стратегию на основе best practices
🔥17👍5🤯4😁1
Интересная статья о том, как защитить своё приложение от злоумышленников, которые захотят что-то там украсть у вас или у ваших пользователей
Автор рассказывает на примере банковского приложения, но всё это может быть актуально и для кучи других (любых?) приложений 🏦
Разработчики банковских приложений, поделитесь, что из списка используете? И что поверх этого списка? 😎
https://medium.com/dbs-tech-blog/develop-a-secure-banking-mobile-application-with-these-eight-security-methods-dbf126fc7979
Автор рассказывает на примере банковского приложения, но всё это может быть актуально и для кучи других (любых?) приложений 🏦
Разработчики банковских приложений, поделитесь, что из списка используете? И что поверх этого списка? 😎
https://medium.com/dbs-tech-blog/develop-a-secure-banking-mobile-application-with-these-eight-security-methods-dbf126fc7979
Medium
Develop A Secure Banking Mobile Application With These Eight Security Methods
A company’s business is only as secure as its ability to guard its resources
🔥5
В GCD есть свой механизм барьеров.
Барьеры GCD делают одну интересную вещь — они заставляют очередь временно не начинать новые задачи и ждут, пока все работающие в очереди задачи закончат свою работу, а затем выполняют свое замыкание.
Как только барьер начинает выполнять свое замыкание, он обеспечивает, чтобы очередь не выполняла никакие другие замыкания в течение этого времени и по существу работает как синхронная функция. Как только замыкание с барьером заканчивается, очередь возвращается к своей обычной работе, обеспечивая гарантию того, что никакая запись не будет проводиться одновременно с чтением или другой запись
Барьеры GCD делают одну интересную вещь — они заставляют очередь временно не начинать новые задачи и ждут, пока все работающие в очереди задачи закончат свою работу, а затем выполняют свое замыкание.
Как только барьер начинает выполнять свое замыкание, он обеспечивает, чтобы очередь не выполняла никакие другие замыкания в течение этого времени и по существу работает как синхронная функция. Как только замыкание с барьером заканчивается, очередь возвращается к своей обычной работе, обеспечивая гарантию того, что никакая запись не будет проводиться одновременно с чтением или другой запись
🔥8
Поговорим еще про потоки.
Процесс описывает выполняющуюся программу (описывает, значит содержит необходимые данные и ресурсы для работы программы), а сама программа же, её процедуры выполняются в потоках. Главное надо понимать, что программа - это не один поток.
Вывод: процесс - это всего лишь способ сгруппировать взаимосвязанные данные и ресурсы, а потоки - единица выполнения (unit of execution), которая распределяется и выполняется на процессоре. Процессы сменяться на процессоре не могут, сменяются и выполняются на процессоре именно потоки.
Процесс описывает программу, в которой есть данные и ресурсы, а потоки позволяют выполнить процесс программы. Т.е, процесс- это всего лишь способ сгрупировать данные, а потоки еденица выполнения
Семафор - это примитив синхронизации, который ограничивает количество потоков, которые могут работать в критической области. Семафор поддерживает подсчитывание количества активизаций семафора, благодаря этому становится возможным пропускать в критическую область более одного потока.
Мьютекс (mutex) - это облегчённый семафор, который не может быть использован как счётчик активизаций, поэтому используется только для обеспечения гарантии, что единовременно с критической областью будет работать только один поток.
Мьютексы могут быть использованы только для взаимного исключения потоков, в отличие от семафоров, которые выполняют также задачу синхронизации потоков.
Мьютекс может находиться только в одном из двух состояний: заблокированном и незаблокированном.
Существуют две операции с мьютексом:
Операция mutex_lock() - блокирует мьютекс. Если мьютекс не заблокирован, то потоку разрешается войти в критическую область. Если же мьютекс уже заблокирован, то поток блокируется в ожидании разблокировки мьютекса другим потоком, который работает с критической областью.
Операция mutex_unlock() - разблокирует мьютекс.
Семафоры следует применять в следующих ситуациях:
1. Нужна синхронизация потоков (требуется наступление какого-то события, один поток сбит пока другой не скажет ему просыпаться)
2. Нужна безопасная общая переменная-счетчик
3. Ограничить количество одновременно работащих в критической области потоков до n штук
Мьютексы следует применять в ситуациях, когда необходимо обеспечить гарантию того, что доступ к критической области будет иметь единовременно только один поток (а не n потоков, в отличие от семафоров). Используется в большинстве ситуаций.
Процесс описывает выполняющуюся программу (описывает, значит содержит необходимые данные и ресурсы для работы программы), а сама программа же, её процедуры выполняются в потоках. Главное надо понимать, что программа - это не один поток.
Вывод: процесс - это всего лишь способ сгруппировать взаимосвязанные данные и ресурсы, а потоки - единица выполнения (unit of execution), которая распределяется и выполняется на процессоре. Процессы сменяться на процессоре не могут, сменяются и выполняются на процессоре именно потоки.
Процесс описывает программу, в которой есть данные и ресурсы, а потоки позволяют выполнить процесс программы. Т.е, процесс- это всего лишь способ сгрупировать данные, а потоки еденица выполнения
Семафор - это примитив синхронизации, который ограничивает количество потоков, которые могут работать в критической области. Семафор поддерживает подсчитывание количества активизаций семафора, благодаря этому становится возможным пропускать в критическую область более одного потока.
Мьютекс (mutex) - это облегчённый семафор, который не может быть использован как счётчик активизаций, поэтому используется только для обеспечения гарантии, что единовременно с критической областью будет работать только один поток.
Мьютексы могут быть использованы только для взаимного исключения потоков, в отличие от семафоров, которые выполняют также задачу синхронизации потоков.
Мьютекс может находиться только в одном из двух состояний: заблокированном и незаблокированном.
Существуют две операции с мьютексом:
Операция mutex_lock() - блокирует мьютекс. Если мьютекс не заблокирован, то потоку разрешается войти в критическую область. Если же мьютекс уже заблокирован, то поток блокируется в ожидании разблокировки мьютекса другим потоком, который работает с критической областью.
Операция mutex_unlock() - разблокирует мьютекс.
Семафоры следует применять в следующих ситуациях:
1. Нужна синхронизация потоков (требуется наступление какого-то события, один поток сбит пока другой не скажет ему просыпаться)
2. Нужна безопасная общая переменная-счетчик
3. Ограничить количество одновременно работащих в критической области потоков до n штук
Мьютексы следует применять в ситуациях, когда необходимо обеспечить гарантию того, что доступ к критической области будет иметь единовременно только один поток (а не n потоков, в отличие от семафоров). Используется в большинстве ситуаций.
🔥11
Коллекции, массивы.
Массив - это упорядоченная набор коллекций, неуникальных значений.
Но это далеко не все, что ты можешь знать о массивах.
В этой статье ты можешь узнать многое о массива, приятного чтения
https://github.com/SomeStay07/iOS-Developer-Roadmap/blob/main/roadmap/Arrays.md
Массив - это упорядоченная набор коллекций, неуникальных значений.
Но это далеко не все, что ты можешь знать о массивах.
В этой статье ты можешь узнать многое о массива, приятного чтения
https://github.com/SomeStay07/iOS-Developer-Roadmap/blob/main/roadmap/Arrays.md
🔥6👍2