LazyLoad Developers
1.62K subscribers
177 photos
132 videos
4 files
532 links
Курсы по мобильной разработке from zero to hero.
По вопросам сотрудничества обращаться к @Jonfir
Сайт - https://lazyload.academy
Правила - https://lazyload.academy/code-of-conduct/
Cсылки на мои другие чаты и каналы https://lazyload.academy/we-in-social/
Download Telegram
https://lazyload.academy/articles/single/ios/swiftui-basics/20230515_30_calculator_ui

Сегодня немного позанимаемся практикой и сверстаем калькулятор.
👍2🔥2
Новый выпуск вышел в открытый доступ

В этой главе мы проведем декомпозицию класса с "Крестиками-ноликами" на несколько классов, чтобы код стал лучше.
🔥3
Новый выпуск для подписчиков на Boosty

Мы разобрали достаточно разные технологий, которые позволяют верстать UI. Да, есть еще очень полезные вещи, с которыми мы познакомимся в рамках этой книги. Есть вещи с которыми мы будем знакомиться на других курсах. Но пока что мы переходим к взаимодействию с пользователем.
🔥5
Новый выпуск для подписчиков на Boosty

И так, мы познакомились с достаточным количеством базовые вещей в SwiftUI, что бы верстать наши приложения, пришло время начать разбираться с тем как оживлять наши приложения. Начнем мы с довольно простого элемента - button. Это простая кнопка которую можно нажимать и выполнять какое-нибудь действие по этому нажатию.
🔥5
Новый выпуск вышел в открытый доступ

В этой главе мы разберемся с универсальными шаблонами под названием дженерики. Это специальные конструкции, которые помогают писать код, который не зависит от конкретного типа.
👍3🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Офер в Яндекс за два дня

Приходите на Weekend Offer Mobile 17–18 июня. Всего за 2 дня можно пройти все технические секции, пообщаться с нанимающими командами и получить офер.

Ищем мобильных разработчиков на iOS, Android и Flutter с опытом от 3 лет. Приглашаем в один из наших офисов в России и Беларуси, также нанимаем в международные хабы в Армении, Казахстане и Сербии.

Регистрация заканчивается 12 июня.

Подробности ищите здесь
👎4👍1
Новый выпуск для подписчиков на Boosty

Мы научились распознавать когда пользователь нажимает на кнопки. Но что нам делать с этой информацией? Для примера мы выводили текст в консоль, но для реального приложения это бесполезно, пользователь никогда не увидит консоль. Мы должны менять информацию на экране. Именно это мы и будем изучать в этой главе.
👍2
Новый выпуск для подписчиков на Boosty

Теперь когда мы знаем про то как обновлять данные на экране, давайте посмотрим как делать это в условиях, когда у нас верстка разделена на несколько разных View.
👍3
Новый выпуск вышел в открытый доступ

В этой главе разберемся с тем, как работают расширения (Extensions) и где они могут быть полезны.
🔥3
Новый выпуск для подписчиков на Boosty

Наш калькулятор уже сверстан, но пока что его кнопки не настоящие, на них нельзя нажать, в этой главе мы сделаем кнопки настоящими.
Что нового в Xcode 15

Ссылка на wwdc

▶️ Улучшенное автодополнение

⭐️ методы с опциональными параметрами предлагаются со всевозможными комбинациями. Открыть список комбинаций можно выбрав базовый метод в списке автодополнения и нажав стрелку в право на клавиатуре.
⭐️ в SwiftUI автодополнение предлагает модификаторы, основываясь на статистке, самого частого порядка модификаторов
⭐️ предлагает имена классов на основе имен файлов

▶️ Константы для ассетов
⭐️ автоматически генерирует константы в коде для изображений
⭐️ новый реактор для строк локализации, вся локализация в одном файле (по аналогии с Assets.xcassets), редактор в виде таблицы, с подсветкой аргументов строк и прочего

▶️ Улучшенная документация
⭐️ документация теперь обновляется в реал тайме, в процессе написания
⭐️ вроде как лучше поддерживает старые md теги + добавлено куча новых тегов

▶️ поддержка макросов, а точнее возможность видеть в редакторе код, который генерируют макросы

▶️ SwiftUI превью, больше не только SwiftUI, новые макросы позволяют показывать и UIViewController на превью

▶️ панель закладок
⭐️ можно создавать закладки на полях
⭐️ закладки отображаются в навигаторе кода
⭐️ закладки можно группировать в папочки, что бы не потерять
⭐️ закладки можно использовать как to do листы
⭐️ к закладке можно переместиться
⭐️ можно увидеть список // TODO в коде
⭐️ можно закрепить результаты поиска

▶️ улучшены инструменты для работы с GIT

⭐️ можно видеть все незакомиченные изменения в одном месте
⭐️ можно вносить в них правки
⭐️ можно сделать комит, пуш и это не сломает Xcode (так обещают)

▶️ Новый отчет о выполнении тестов, графики, статистика, подсветка провалившихся тестов, таймлайн просмотр выполнения UI тестов
-> консоль теперь поддерживает расширенные фильтры логов (os_log), да и выглядит это приятнее

#lazywwdc
🔥7
Новый выпуск для подписчиков на Boosty

В прошлой главе мы добавили настоящие кнопки и метод который получает нажатия на их в калькулятор. В этой главе пришли пора заставить наш калькулятор по настоящему работать.
Что нового в UIKit

▶️ Макрос для запуска превью UIViewController и UIView
▶️ Новый метод UIViewController.viewIsAppearing, вызывается между willAppear и didAppear, вызывается когда уже есть актуальные размеры view, но до того как контроллер будет отображен, доступен с iOS 13.
▶️ Поддержка анимированных Symbols.
▶️ Контроллеры теперь имеют стандартные элементы на случай отсутствия данных. UIContentUnavailableConfiguration умеет показывать лоадер или информацию о том как получить данные. Можно задать кастомные элементы в виде SwiftUI блока.
▶️ Новый метод updateContentUnavailableConfiguration, вызывается для обновления UIContentUnavailableConfiguration, можно в нем что-нибудь подхачить.
▶️ Текст теперь поддерживает динамическую высоту строки, которая может отличаться для разных слов и возможно букв.
▶️ Добавлена поддержка локализаций в UIImage.
▶️ На iPad можно перетаскивать окна, как в MacOS, по дефолту перетаскивание работает с навбаром, но можно выбрать любую вью.
▶️ Сайд бар на iPad может скрываться автоматически при изменении размеров окна.
▶️ UIScollView теперь можно скролить с клавиш клавиатуры если она подключена.
▶️ У UICollectionView улучшили перформанс (что бы это не значило) как минимум в два раза, например при сортировке или удалении ячеек.
▶️ UICollectionViewCompositionalLayout поддерживает новый параметр расчета размера ячеек unformAccrossSiblings, с ним все ячейки будут получать размер самой большой ячейки в группе.
▶️ Системный статус бар, теперь автоматически меняет цвет в зависимости от контента который находится под ним.

#lazywwdc
👍161
Что нового в SwiftUI

▶️ С помощью SwiftUI можно создавать интерфейсы для apple vision
▶️ Новые компоненты для watchOS
⭐️ NavigationSplitView
⭐️ TabView
⭐️ NavigationStack
⭐️ DatePicker
⭐️ ContainerBackground для крутых фонов
⭐️ Крутой ToolBar для элементов управления
▶️ Добавлена поддержка интерактивных виджетов, в превью можно добавлять таймлайн, раскадровку виджетов по времени
▶️ Новые фреймворки поддерживают SwitUI
⭐️ MapKit
⭐️ StoreKit
▶️ Улучшения`SwiftChart`
⭐️ Скролящиеся диаграммы
⭐️ Выбор (select) данных
⭐️ Круговые диаграммы с SectorMark
▶️ Упрощенный синтаксис для хранения стейта и передачи данных
⭐️ Макрос @Observable вместо ObservableObject, не требует помечать свойства как Published и использовать @StateObject, @ObservedObject и EnvironmentObject
⭐️ Кастомные объекты можно внедрять через Environment без кастомных ключей, просто используя тип объекта (привет flutter)
⭐️ @State можно доставать из Environment по типы объекта (привет flutter №2)
▶️ SwiftData вместо CoreData, разумеется получила поддержку SwiftUI
⭐️ Макрос @Model делает класс пригодным для хранения в SwiftData
⭐️ Макрос @Model так же включает в себя функционал макроса @Observable (2 в 1)
⭐️ Макрос @Query автомагически связывает свойство View и данные в БД SwiftData и поддерживает сортировки и прочее @Query(sort: \.dateSpotted) private var dogs: [Dog]
⭐️ При обновлении данных в БД, автомагически обновляется UI (SwiftData можно легко использовать как стор в небольших приложениях и это шикарно)
▶️ Table на macOS поддерживает настройку таблиц (изменение порядка столбцов, сортировку данных и тд) и раскрывающиеся строки из коробки
▶️ Улучшены анимации в SwitUI
⭐️ KeyframeAnimator наконец то добавляет key frame (пошаговые) анимации, без этого анимации делать было практически нельзя
⭐️ Модификатор phaseAnimator позволяет запускать серию анимаций, одну за другой
⭐️ Модификатор visualEffect, позволяет добавлять эффекты основываясь на позиции и размере элемента внутри другого элемента без GeometryReader
⭐️ ShaderLibrary позволяет использовать шейдры для стилизации UI элементов
⭐️ Модификатор symbolEffect добавляет эффекты для анимированных symbols
▶️ Улучшенная поддержка локализаций для Text
⭐️ Модификатор textScale позволяет изменять размер текста основываясь на семантике информации, например текст помеченный как "единицы измерения" будет масштабироваться в зависимости от локализации
⭐️ Модификатор typesettingLanguage, поможет SwiftUI избежать проблем отрисовки нестандартных символов, например из тайского алфавита
▶️ Улучшен скрол в SwiftUI
⭐️ Модификатор scrollTransition позволит добавлять эффекты при скроле (масштабирование, прозрачность и др.) на элементы
⭐️ Модификатор continerRelativeFrame определяет размер элементов LazyStack на основе видимого пространства, другими словами это постраничный просмотр элементов, позволяет выбирать количество страниц и количество элементов на странице
⭐️ Модификатор scrollTargetLayout добавляет детерминированную прокрутку к LazyStack, совместно с scrollTargetBehavior позволяет выбирать тип прокрутки, по границам элементов, по границам страницы или кастомный вариант
⭐️ Модификатор scrollPosition позволит отслеживать id элемента вверху видимой области скрола
▶️ Улучшена поддержка accessibility

#lazywwdc
🔥11👍3
Новый выпуск вышел в открытый доступ

В этой главе мы познакомимся с последним способом создания типов в Swift - с протоколами.
This media is not supported in your browser
VIEW IN TELEGRAM
24 июня Яндекс и Яндекс Маркет проведут Yandex BDUI Conf — конференцию для iOS- и Android-разработчиков, которым интересен Backend-Driven UI.

Yandex BDUI Conf — это день докладов и отдыха в пространствах офиса Яндекса. А для онлайн-участников – трансляция всего происходящего и специальный доклад.

За день послушаем 7 докладов от Супераппа Яндекса и Яндекс Маркета, AliExpress Russia, Alfa и Авито. Спикеры расскажут о нашем опенсорс-фреймворке DivKit, архитектуре BDUI, раскатке приложений для Android с помощью Jetpack Compose. 

Когда: 24 июня, 11:00
Формат: офлайн (будет премодерация) и онлайн в ВК и на YouTube

Программа и регистрация
💩2
Новый выпуск для подписчиков на Boosty

Завершим пока эксперименты с калькулятором, и вернемся к средствам обработки пользовательских жестов. Мы уже познакомились с кнопками, и в большинстве случаев их достаточно, но иногда нам нужны не кнопки, а другие жесты. С ними мы и будем сегодня знакомиться.
🔥6👍1
Новый выпуск для подписчиков на Boosty

В этой главе поговорим о последнем из основных способов взаимодействий с пользователем, получение текста через TextField.
🔥6
Новый выпуск вышел в открытый доступ

В прошлой главе мы познакомились с протоколами, которые имеют описательное назначение, то есть описывают, что должны иметь структуры или классы. В этой главе мы узнаем, как можно наделить протокол реализацией по умолчанию.
🔥4
Новый выпуск для подписчиков на Boosty

В этой главе поговорим о том как изменить внешний вид TextField.
🔥2
Новый выпуск для подписчиков на Boosty

В это главе мы разберемся как работать с экранной клавиатурой.
🔥2