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

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

По всем вопросам обращаться к @itereznikov
Download Telegram
🗺📱Дорожная карта 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
Решить, какую структуру данных использовать для представления заданного набора значений, часто бывает намного сложнее, чем кажется
Стандартная библиотека Swift поставляется с тремя основными структурами данных — Array, Dictionary и Set, каждая из которых имеет свой набор оптимизаций, плюсов и минусов.

Подробнее про типы коллекций, можно озанакомиться в данной статье.
https://habr.com/ru/company/otus/blog/468239/
🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
🛠Одним из не то, чтобы новых, но незаменимых классов в UIKit является UISheetPresentationController. Этот класс позволяет легко создать раскрываемый bottom sheet всего с несколькими строками кода.

Если вы не знаете, что такое bottom sheet, откройте встроенное приложение «Карты», чтобы посмотреть. На нем отображается bottom sheet, на котором пользователи могут выполнять поиск и получать доступ к сохраненным местоположениям. Вы можете развернуть и свернуть его. Также этот тип шаблона пользовательского интерфейса можно найти в некоторых популярных приложениях, таких как Google Maps, Twitter и Instagram.

🔴 Теперь к коду.
Вы можете указать размер контроллера, установив свойство detents. Вот пример, показывающий, как установить размер bottom sheet:

let webViewController = WebViewController()
 
if let sheet = webViewController.sheetPresentationController {
    sheet.detents = [ .medium(), .large() ]
}
 
present(webViewController, animated: true)
👍13