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

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

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

Перечисления полезны, когда нам нужно работать с группой однотипных значений. Когда же создается пример для перечисления, значение обязательно должно быть равным какому-либо случаю.
👍9💩2
Вариативные параметры

Вариативный параметр принимает ноль или более значений определенного типа. Он обозначается тремя последовательными точками, после типа данных параметра в декларации функции. Данный метод – хорошая альтернатива, когда для работы нам нужно только одно значение. Swift может конвертировать одно значение в набор переменных.
👍6👎3
Полезная статья о том, как улучшить качество кода

Разница в том, что тут автор и на словах предлагает решение, и инструменты, которые помогают следить за качеством кода и улучшать его! 👍

Читаем и улучшаем качество кода 🔥
https://kwnstantinosnikoloutsos.medium.com/who-else-wants-to-improve-ios-codebase-quality-3f7c77a2dd10
🔥8🤮2👍1
Наблюдатели

Наблюдатели выполняют код, когда меняется свойство. Наблюдатель willSet создается прямо перед изменением свойства, он создает переменную newValue. Наблюдатель didSet срабатывает сразу после изменения свойства и создает oldValue.
👍9🤮2👎1
Приватные сеттеры

Доступ к свойствам, помеченным как private(set), можно получить из-за пределов
структуры, но присвоить только внутри нее. Это позволяет сеттеру быть более строгим, чем геттеру.
👍7🤮2
3 способа использования enum, которые должны быть в вашем арсенале

💪 Перечисление (enum) - это очень мощный тип в Swift. Каждый из нас использует его практически в каждом проекте.

В публикации рассматривается три блока:

1️⃣ Сложные случаи с привязкой значений.

2️⃣ Если нас интересуют конкретный кейс перечисления, то можно использовать if let и guard let.

3️⃣ Если связанное значение optional, то также можно использовать соответствующий шаблон. Это будет более понятно на конкретных примерах из статьи.
🔥4🤮2
Raw Values

Перечисления могут иметь raw value, связанное с каждым случаем, путем добавления : RawValueType после имени перечисления. Raw value может быть присвоено типам String, Character, Int, Double или Float. Перечисления с raw value могут быть созданы с помощью init(rawValue:).
🔥6🤮2
Метод наборов .subtracting()

Sets (наборы) – неупорядоченные коллекции уникальных элементов. Вы можете создать новый набор, который будет состоять из элементов первого набора, но при этом без общих элементов двух входных наборов. Для этого используйте метод .subtracting().
👍3🤮2
Проблемы многопоточки: Race Condition vs Data Race

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

Race condition и data race — две разные проблемы многопоточности, которые часто путают.

Эти проблемы очень похожи, но есть различия:

Race Condition — это недостаток, возникающий, когда время или порядок событий влияют на правильность программы.

Data Race — это состояние когда разные потоки обращаются к одной ячейке памяти без какой-либо синхронизации и как минимум один из потоков осуществляет запись.
👍3💩2
Замыкания

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

Замыкания могут быть переданы в качестве аргументов в функции. Передача замыканий функциям позволяет указать, как должна работать функция.
🔥11👍2
🧑‍💻Class && Struct (классы и структуры)

💻Отличный материал, который раскрывает основные отличия структуры от классов, а так же их применение!

По умолчанию Apple рекомендует использовать структуры. Структуры также полезны в следующих сценариях:
- Используйте структуры для простых типов данных. Воспринимайте их как простые базы данных, которые вы можете использовать в своем коде. Поскольку они четко определены и часто не нуждаются в сложных отношениях между объектами.
- В многопоточной среде, например, с подключением к базе данных в другом потоке, структуры более безопасны. и могут быть безопасно скопированы из одного потока в другой. Классы не имеют присущей им безопасности, если только они не намеренно сделаны поточно-ориентированными.
- Когда свойства структуры в основном являются значимыми типами, например String, имеет смысл обернуть их в структуру вместо класса.
Использование структур имеет дополнительное преимущество - вам проще анализировать изменения данных в вашем коде. Когда тип является структурой, вы можете быть уверены, что никакая другая часть вашего кода не сможет удерживать ссылку на объект. То есть структура не может быть изменена какой-либо другой частью вашего кода.

А дальше в статье https://habr.com/ru/post/592341/
🔥7😱2
Свойство .count

Свойство .count возвращает целое число, представляющее количество пар ключ-значение в словаре.
👍7
Свойство .isEmpty

Свойство .isEmpty возвращает true, если в словаре нет пар ключ-значение, false – если словарь содержит пары ключ-значение.
👍11
Верстка кодом🗿

Отличный материал, хорошая подача. Для тех кто хочет научиться верстать UI элементы кодом. Советую к прочтению. 🏰

https://www.hackingwithswift.com/read/8/2/building-a-uikit-user-interface-programmatically
👍10
Метод init()

Структуры могут иметь метод init() для инициализации значений свойств экземпляра. В отличие от других методов, метод init() не требует ключевого слова func. В его теле используется ключевое слово self для ссылки на фактический экземпляр структуры.
👍9
Мутирующие методы

Методы структуры, объявленные с ключевым словом mutating, позволяют методу влиять на собственные свойства экземпляра.
🔥14
Пример создания приложения Todo list для iOS с использованием VIPER

Крутая статья про использование
архитектуры VIPER. Советую к прочтению.

🤔Существует множество архитектур на выбор: MVC, MVVM, MVP, View State, VIPER и многие другие.
Архитектура, которую мы выберем, будет определять, как будет построено программное обеспечение и как оно будет масштабироваться по мере роста.

https://www.alfianlosari.com/posts/building-todo-list-ios-app-with-viper-architecture/
👍11
Переопределение

Подкласс может предоставить собственную реализацию свойства или метода, унаследованного от суперкласса. Это известно как переопределение.
👍14
Как сделать код производительным?

В документации на гите есть много крутых статей.
Я убежден, что если прочитаешь все — станешь гением и единственным человеком в мире, кто смог это сделать.

Поделюсь одной крутой страницей, где прячутся крутые советы по оптимизации своего кода

https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst#advice-use-final-when-you-know-the-declaration-does-not-need-to-be-overridden
👍10
Добавление элементов в массив

Добавить элементы в массив можно двумя способами. Первый способ – использовать метод .append(). Для этого пишем его после имени массива, а в скобках указываем значение, которое хотим добавить в конец. Второй способ – использовать оператор присваивания со сложением (+=).
Кстати, с помощью оператора += можно присвоить сразу несколько элементов.
👍17