рискам Изучили базовые основы SwiftUI на упражнениях Посмотрели что есть в нашем приложении и как мы будем решать это на SwiftUI Разделили между собой задачи на изучение Засинкались и составили базу знаний
рискам Изучили базовые основы SwiftUI на упражнениях Посмотрели что есть в нашем приложении и как мы будем решать это на SwiftUI Разделили между собой задачи на изучение Засинкались и составили базу знаний
рискам Изучили базовые основы SwiftUI на упражнениях Посмотрели что есть в нашем приложении и как мы будем решать это на SwiftUI Разделили между собой задачи на изучение Засинкались и составили базу знаний
механизм Preference Как работает механизм Environment Чем отличаются Property Wrappers По желанию: как работают анимации * Полезные ссылки будут в конце
рискам Изучили базовые основы SwiftUI на упражнениях Посмотрели что есть в нашем приложении и как мы будем решать это на SwiftUI Разделили между собой задачи на изучение Засинкались и составили базу знаний
рискам Изучили базовые основы SwiftUI на упражнениях Посмотрели что есть в нашем приложении и как мы будем решать это на SwiftUI Разделили между собой задачи на изучение Засинкались и составили базу знаний
рискам Изучили базовые основы SwiftUI на упражнениях Посмотрели что есть в нашем приложении и как мы будем решать это на SwiftUI Разделили между собой задачи на изучение Засинкались и составили базу знаний
+ Общий кэш с UIKit (потому что там тоже Nuke) – Нет стабильной версии Написали враппер, чтобы можно было легко заменить на другой компонент Image loading
Category Placeholders? Stubs? struct UserView.Model { let id: Int let id: imageUrl let name: String ... let name: String let analyticsId: Int let category: String }
Int let name: String ... let data: UserJson } UserJson {} +1 зависимость Network/Service struct UserView.Model { let id: Int let name: String ... let data: UserJson }
Int let name: String ... let data: UserJson } UserJson {} +1 зависимость Network/Service struct UserView.Model { let id: Int let name: String ... let data: UserJson }
let username: String let description: String let onUserTap: () #$ Void let onUserFollow: () #$ Void } struct Model: Identifiable { let id: Int let imageUrl: URL let username: String let description: String enum Action { case tap case follow } let action: (Action) #$ Void } Actions in view
SPM Иногда лэйаут на экране просто ломается: помогает установка фиксированного фрейма Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid Не доступны все опции привычной кастомизации: https:// github.com/siteline/SwiftUI-Introspect
SPM Иногда лэйаут на экране просто ломается: помогает установка фиксированного фрейма Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid Не доступны все опции привычной кастомизации: https:// github.com/siteline/SwiftUI-Introspect
SPM Иногда лэйаут на экране просто ломается: помогает установка фиксированного фрейма Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid Не доступны все опции привычной кастомизации: https:// github.com/siteline/SwiftUI-Introspect
SPM Иногда лэйаут на экране просто ломается: помогает установка фиксированного фрейма Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid Не доступны все опции привычной кастомизации: https:// github.com/siteline/SwiftUI-Introspect
не сразу, ему нужно время Не боятся создавать разные View для похожих элементов Лучше использовать 2 пробела вместо 4-х и не писать self На чипах apple silicon работает лучше
be a bit confusing to start implementing UIs with SwiftUI. At first, you are not sure which element or modifier to use for certain items. However, this feeling goes away very quickly and you start to understand the simplicity and the ease with which you are able to put building blocks together to achieve the desired outcome. It’s just a different way of looking at structure of UI and understanding how certain core concepts work.
работе, первое время реально тяжело, но голова быстро перестраивается. Иногда я сĸучаю по UIKit и его гибĸости, ĸоторая поĸа превосходит SwiftUI, но ĸажется это будет недолго.