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

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

По всем вопросам обращаться к @itereznikov
Download Telegram
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
Очень хороший материал с примерами на очень важную тему 🙃
Generics 👍🏻
Материал, конечно, больше для новичков, но от этого он менее хорошим не становится. А сами дженерики используются в куче языков, поэтому разобраться в них точно нужно всем! 🤓
https://www.avanderlee.com/swift/generics-constraints/
👍8🔥2
Хранение и использование кастомных ресурсов (картинки, шрифты, цвета) сейчас есть, наверное, в каждом приложении. И часто в этом всём встречается псевдо-контролируемый хаос 🤯
Так вот, чтобы уйти от иллюзии контроля и действительно начать удобно работать с ресурсами, автор предлагает простой, удобный и type-safe подход 👍
Конечно речь идёт об Assets обвязанных enum-ами. Возможно, многие уже поняли, о чём речь, а может даже и используют так. Но в любом случае, вот статья с примерами удобного подхода к использованию ресурсов в вашем приложении 🔥
https://runhum.medium.com/type-safe-assets-in-swift-798cab38f221
👍5
Swiftly — это универсальный справочник, быстрая шпаргалка для разработчиков Swift. Он содержит справочные примеры использования всех нужных операторов для разработчиков всех уровней.

https://swiftly.dev/
🔥15
Как iOS 16 ускоряет запуск вашего приложения.

Эти улучшение связано с ускорением проверок протоколов, которые были медленными. Кроме того, в iOS 16 сокращается время загрузки двоичного файла за счет уменьшения объема данных, загружаемых с диска. Об этом вы также можете прочитать в предыдущей статье.

https://is.gd/CgCtJU
🔥2