EasySwift iOS🍏
3.03K subscribers
269 photos
8 videos
394 links
Все самое интересное в мире iOS разработки 🧑🏻‍💻

Предложить статью или новость: @EasySwiftBot

По всем вопросам обращаться к @itereznikov
Download Telegram
Вариативные параметры

Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
👍8🤯2
Grand Central Dispatch

Dispatch, больше известный как GCD – фреймворк, содержащий в себе языковые конструкции, позволяющие нам комфортно и достаточно просто управлять потоками, задачами для выполнения и ресурсами, которые нам необходимо захватить. GCD работает на системном уровне, таким образом он может удовлетворить потребности всех запущенных приложений на девайсе, при этом управляя ресурсами эффективно.

GCD реализован на языке C, поэтому фактически является низкоуровневым фреймворком.

Queue
Queue (очередь) – является основным примитивом GCD. Очередь представляет собой сущность, выполняющую задачи, поступающие на вход, на одном или множестве потоков. Представьте себе очередь на кассу в любом продуктовом магазине. В данном случае касса, которая вас обслужит – это поток, вы – сама задача, а все вместе – очередь.

Очередь работает по принципу FIFO, таким образом первая задача на очереди будет первой направлена на выполнение на потоке.
👍9🔥2
Хвостовое замыкание

Если последний аргумент функции – замыкание, ее можно вызвать с помощью хвостового замыкания. Для этого опустите последний аргумент в вызове метода и закройте круглые скобки. Затем определите замыкание сразу после закрытия круглых скобок.
👍9😱1
Есть много споров антипаттер ли одиночка или нет. Юзать его — ваша ответственность. Критично же юзать и не знать какие риски на себя берешь. Поэтому вкратце:

1. Синглтон нарушает SRP (Single Responsibility Principle) — класс синглтона, помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров.

2. Глобальное состояние. Про вред глобальных переменных вроде бы уже все знают, но тут та же самая проблема. Когда мы получаем доступ к экземпляру класса, мы не знаем текущее состояние этого класса, и кто и когда его менял, и это состояние может быть вовсе не таким, как ожидается.

есть неплохая статья, которая описывает все риски использования синглотона и его альтернативы

https://habr.com/ru/company/vk/blog/334078/
🔥6
Вариативные параметры

Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
👍8
Clean Architecture и MVVM в iOS: пример реализации проекта

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

Как мы видим на графике Clean Architecture, у нас есть различные слои в приложении. Главное правило — не иметь зависимостей от внутренних слоев к внешним. Стрелки, указывающие снаружи внутрь, это правило зависимостей. Зависимости могут быть только от внешнего слоя внутрь.

📖 В этой статье на рабочем примере проекта показывается, как архитектурные паттерны MVVM и Clean Architecture могут быть применены в приложении для iOS.

🛠 Проект на Github, который может быть использован в качестве шаблона.
🔥8
Крутая статья про Архитектуры.

Каждый из нас всегда хоть раз задумывался, а по какой архитектуре я буду писать своё приложение? Каких принципов я буду придерживаться?

Держите, архитекторы.

https://habr.com/ru/company/badoo/blog/281162/
👍12
🗺📱Дорожная карта iOS Developer 2022

Будет полезно начинающим, которые самостоятельно изучают язык, чтобы составить свою, наиболее эффективную стратегию на основе best practices
🔥17👍5🤯4😁1
Интересная статья о том, как защитить своё приложение от злоумышленников, которые захотят что-то там украсть у вас или у ваших пользователей

Автор рассказывает на примере банковского приложения, но всё это может быть актуально и для кучи других (любых?) приложений 🏦

Разработчики банковских приложений, поделитесь, что из списка используете? И что поверх этого списка? 😎

https://medium.com/dbs-tech-blog/develop-a-secure-banking-mobile-application-with-these-eight-security-methods-dbf126fc7979
🔥5
В GCD есть свой механизм барьеров.

Барьеры GCD делают одну интересную вещь — они заставляют очередь временно не начинать новые задачи и ждут, пока все работающие в очереди задачи закончат свою работу, а затем выполняют свое замыкание.

Как только барьер начинает выполнять свое замыкание, он обеспечивает, чтобы очередь не выполняла никакие другие замыкания в течение этого времени и по существу работает как синхронная функция. Как только замыкание с барьером заканчивается, очередь возвращается к своей обычной работе, обеспечивая гарантию того, что никакая запись не будет проводиться одновременно с чтением или другой запись
🔥8
Поговорим еще про потоки.

Процесс описывает выполняющуюся программу (описывает, значит содержит необходимые данные и ресурсы для работы программы), а сама программа же, её процедуры выполняются в потоках. Главное надо понимать, что программа - это не один поток.

Вывод: процесс - это всего лишь способ сгруппировать взаимосвязанные данные и ресурсы, а потоки - единица выполнения (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
🔥6👍2
🔐 Замыкания – это независимые блоки с определенным функционалом, которые можно передать и использовать в вашем коде. Замыкания в Swift похожи на блоки в C, Objectiv-C и лямбды в других языках программирования.

Замыкания могут захватывать и хранить ссылки на любые константы или переменные из контекста, в котором они были объявлены. Эта процедура известна как заключение этих констанций и переменных, отсюда и название «замыкание».

Синтаксис замыкающего выражения имеет следующую общую форму:

{ (параметры) -> тип результата in
выражения
}
5🔥3
Краткая история о том, как появился VIPER

MVC
превратился в Massive View Controller, т.е. огромный вьюконтроллер, в котором ему позволялось очень много. В нем было много UI и бизнес-логики, и, как следствие, такой код почти невозможно было тестировать, отлаживать и поддерживать.

Поэтому разработчикам понадобилась другая архитектура, которая была бы более-менее гибкой, соответствовала SOLID принципам (особенно "Принципу единственной ответственности") и чистой архитектуре (обзор на русском).

https://apptractor.ru/info/articles/ponimaem-arhitekturu-viper.html
👍5🔥2
📝Разбираемся в памяти. Когда и что нужно использовать, где применять и как с этим работать.

💻Автор статьи @somestay

https://medium.com/p/types-of-memory-in-swift-b3e7a8cbdf32
👍10
Шаблоны проектирования простым языком. Порождающие шаблоны

Шаблоны проектирования — это руководства по решению повторяющихся проблем. Это не классы, пакеты или библиотеки, которые можно было бы подключить к вашему приложению и сидеть в ожидании чуда. Они скорее являются методиками, как решать определенные проблемы в определенных ситуациях.

Будьте осторожны
шаблоны проектирования не являются решением всех ваших проблем;
не пытайтесь использовать их в обязательном порядке — это может привести к негативным последствиям. Шаблоны — это подходы к решению проблем, а не решения для поиска проблем;
если их правильно использовать в нужных местах, то они могут стать спасением, а иначе могут привести к ужасному беспорядку.

https://tproger.ru/translations/design-patterns-simple-words-1/
🔥51