План развития iOS-разработчика с ссылками на материалы обучения
1. Основы программирования
Если Вы, являетесь совсем новичком, я бы порекомендовал изучить принципы программирования. Курс CS50 для этого идеально подходит. Это серия лекций по Computer Science от Гарвардского университета.
2. Основы Swift
Смотрим следующий плейлист по основам и делаем домашнее задание. Параллельно читаем книгу Василия Усова.
3. Фреймворк UIKit
Рекомендую следующий плейлист с выполнением домашних заданий. Обязательно обращаемся к нашей документации от Apple. Параллельно читаем книгу Мет Ньберга.
4. Работа с сетью. Клиент-серверное приложение
Читаем про работу с сетью, смотрим туториалы, видео и хороший мини плейлист
Берём публичное API и работаем с ним. Создаём приложение используя знания UIKit и сеть.
5. Архитектурные паттерны
Переходим от MVC к другим архитектурам. Мало уметь писать код, он еще должен быть масштабируемый, гибкий и элегантный. Для этого умные дяди инженеры придумали паттерны проектирования — типовые решения для типовых архитектурных задач в коде. Они применимы к любому языку программирования и представляют собой, по большей части, концепции, в которых описываются разные подходы. Советую хороший сайт. А так же, книгу "Совершенный код".
6. Многопоточность. Производительность приложения
Смотрим данный плейлист. Внедряем технологии в ваши проекты.
7. Пишем проект. Учим теорию.
Если вы дошли до 7 пункта, то данный набор знаний, вам хватит написать приложение. Придумайте дизайн, идею и в бой! Так же делюсь с вами ссылкой , где вы можете почитать и узнать что-то новое.
А если, вы хотите каждый день узнавать интерессные новости из мира iOS, подписывайтесь на канал EasySwift
1. Основы программирования
Если Вы, являетесь совсем новичком, я бы порекомендовал изучить принципы программирования. Курс CS50 для этого идеально подходит. Это серия лекций по Computer Science от Гарвардского университета.
2. Основы Swift
Смотрим следующий плейлист по основам и делаем домашнее задание. Параллельно читаем книгу Василия Усова.
3. Фреймворк UIKit
Рекомендую следующий плейлист с выполнением домашних заданий. Обязательно обращаемся к нашей документации от Apple. Параллельно читаем книгу Мет Ньберга.
4. Работа с сетью. Клиент-серверное приложение
Читаем про работу с сетью, смотрим туториалы, видео и хороший мини плейлист
Берём публичное API и работаем с ним. Создаём приложение используя знания UIKit и сеть.
5. Архитектурные паттерны
Переходим от MVC к другим архитектурам. Мало уметь писать код, он еще должен быть масштабируемый, гибкий и элегантный. Для этого умные дяди инженеры придумали паттерны проектирования — типовые решения для типовых архитектурных задач в коде. Они применимы к любому языку программирования и представляют собой, по большей части, концепции, в которых описываются разные подходы. Советую хороший сайт. А так же, книгу "Совершенный код".
6. Многопоточность. Производительность приложения
Смотрим данный плейлист. Внедряем технологии в ваши проекты.
7. Пишем проект. Учим теорию.
Если вы дошли до 7 пункта, то данный набор знаний, вам хватит написать приложение. Придумайте дизайн, идею и в бой! Так же делюсь с вами ссылкой , где вы можете почитать и узнать что-то новое.
А если, вы хотите каждый день узнавать интерессные новости из мира iOS, подписывайтесь на канал EasySwift
🔥52❤8👍7🎉3
This media is not supported in your browser
VIEW IN TELEGRAM
UICollectionViewLayout для пиццы из разных половинок
Как работает UICollectionView
UICollectionView — это сабкласс от UIScrollView, а он — это обычный UIView, у которого от свайпа меняется bounds. Перемещая его .origin, мы смещаем видимую зону, а меняя .size влияем на масштаб.
При смещении экрана UICollectionView создаёт (или повторно использует) ячейки, а правила их отображения описаны в UICollectionViewLayout. С ним мы и будем работать.
Возможности у UICollectionViewLayout большие, можно задать любое отношение между ячейками. Например, можно сделать очень похоже на то, что умеет iCarousel.
Лейаут не работает с ячейками напрямую. Вместо них используются UICollectionViewLayoutAttributes — это набор параметров, которые будут применены к ячейке. Frame — основной из них, отвечает за положение и размер ячейки. Другие параметры: прозрачность, смещение, положение в глубине экрана и т.д.
В данной статье инженеры из Додо Пиццы рассказывают о том, как они написали лейаут для iOS, с чем столкнулись и от чего отказались.
Как работает UICollectionView
UICollectionView — это сабкласс от UIScrollView, а он — это обычный UIView, у которого от свайпа меняется bounds. Перемещая его .origin, мы смещаем видимую зону, а меняя .size влияем на масштаб.
При смещении экрана UICollectionView создаёт (или повторно использует) ячейки, а правила их отображения описаны в UICollectionViewLayout. С ним мы и будем работать.
Возможности у UICollectionViewLayout большие, можно задать любое отношение между ячейками. Например, можно сделать очень похоже на то, что умеет iCarousel.
Лейаут не работает с ячейками напрямую. Вместо них используются UICollectionViewLayoutAttributes — это набор параметров, которые будут применены к ячейке. Frame — основной из них, отвечает за положение и размер ячейки. Другие параметры: прозрачность, смещение, положение в глубине экрана и т.д.
В данной статье инженеры из Додо Пиццы рассказывают о том, как они написали лейаут для iOS, с чем столкнулись и от чего отказались.
👍20🔥8❤5🥰2
Асинхронное ожидание в Swift
Асинхронное ожидание является частью новых изменений структурированного параллелизма, которые появились в Swift 5.5 во время WWDC 2021. Параллелизм в Swift означает одновременное выполнение нескольких фрагментов кода. Это очень упрощенное описание, но оно должно дать вам представление о том, насколько важен параллелизм в Swift для производительности ваших приложений. С помощью новых асинхронных методов и операторов await мы можем определять методы, выполняющие работу асинхронно.
Async означает асинхронный и может рассматриваться как атрибут метода, дающий понять, что метод выполняет асинхронную работу.
Await - это ключевое слово, которое используется для вызова асинхронных методов. Вы можете рассматривать их как лучших друзей в Swift, поскольку одно никогда не будет обходиться без другого
Почитать статью.
Посмотреть доклад
Асинхронное ожидание является частью новых изменений структурированного параллелизма, которые появились в Swift 5.5 во время WWDC 2021. Параллелизм в Swift означает одновременное выполнение нескольких фрагментов кода. Это очень упрощенное описание, но оно должно дать вам представление о том, насколько важен параллелизм в Swift для производительности ваших приложений. С помощью новых асинхронных методов и операторов await мы можем определять методы, выполняющие работу асинхронно.
Async означает асинхронный и может рассматриваться как атрибут метода, дающий понять, что метод выполняет асинхронную работу.
Await - это ключевое слово, которое используется для вызова асинхронных методов. Вы можете рассматривать их как лучших друзей в Swift, поскольку одно никогда не будет обходиться без другого
Почитать статью.
Посмотреть доклад
👍9🔥7❤3
Начинаем работу над модуляризацией iOS-приложения
К модуляризации приложений можно подходить с разных сторон в зависимости от вариантов использования и личных предпочтений. Я думаю, что в идеале каждый модуль должен быть максимально независимым и зависимости, которые нужны модулю, должны быть доступны через интерфейс (он же протокол), а конкретные реализации должны внедряться через внедрение зависимостей. Не всегда возможно или практично скрыть реализацию через интерфейс (протокол), но тем не менее это должно быть целью.
Еще одна важная вещь заключается в том, что модуль должен быть автономным, то есть все функции, связанные с модулем, должны находиться внутри модуля, а не распределяться по разным модулям. Например, модуль онбординга должен иметь весь поток внутри себя, все сетевые запросы и модели ответов внутри, а события отслеживания аналитики, где сеть и аналитика использоваться через интерфейс (протокол) и внедряться в конкретной реализации.
Вот пример того, как реализуется начальный подход с UIComponents и Core фреймворком и как все работает вместе:
Статья
Код приложения
К модуляризации приложений можно подходить с разных сторон в зависимости от вариантов использования и личных предпочтений. Я думаю, что в идеале каждый модуль должен быть максимально независимым и зависимости, которые нужны модулю, должны быть доступны через интерфейс (он же протокол), а конкретные реализации должны внедряться через внедрение зависимостей. Не всегда возможно или практично скрыть реализацию через интерфейс (протокол), но тем не менее это должно быть целью.
Еще одна важная вещь заключается в том, что модуль должен быть автономным, то есть все функции, связанные с модулем, должны находиться внутри модуля, а не распределяться по разным модулям. Например, модуль онбординга должен иметь весь поток внутри себя, все сетевые запросы и модели ответов внутри, а события отслеживания аналитики, где сеть и аналитика использоваться через интерфейс (протокол) и внедряться в конкретной реализации.
Вот пример того, как реализуется начальный подход с UIComponents и Core фреймворком и как все работает вместе:
Статья
Код приложения
🔥10👍3❤2🥰1👏1
С наступающим Новым Годом!
В этом году мы концентрировались на Swift и дефолтных фреймворках, а в следующем постараемся удивить новыми форматами и спецпроектами. А пока хотим пожелать:
1️⃣ Развития
Продолжайте расти, узнавайте новое и применяйте на практике, совершенствуйте код, подходы и не бойтесь эксперементировать
2️⃣ Получать удовольствие
Вспомните чувства, когда вы только начинали обучаться. Когда новая строчка кода, фреймворк и UI компонент приводили к эйфории. Желаем, чтобы эти чувства не угасали, а работа приносила только положительные эмоции
3️⃣ Покорения новых вершин
Поставьте амбициозные цели, будь то устройство на первую работу или переход на новый грейд, мы уверены, что всё получится
В этом году мы концентрировались на Swift и дефолтных фреймворках, а в следующем постараемся удивить новыми форматами и спецпроектами. А пока хотим пожелать:
1️⃣ Развития
Продолжайте расти, узнавайте новое и применяйте на практике, совершенствуйте код, подходы и не бойтесь эксперементировать
2️⃣ Получать удовольствие
Вспомните чувства, когда вы только начинали обучаться. Когда новая строчка кода, фреймворк и UI компонент приводили к эйфории. Желаем, чтобы эти чувства не угасали, а работа приносила только положительные эмоции
3️⃣ Покорения новых вершин
Поставьте амбициозные цели, будь то устройство на первую работу или переход на новый грейд, мы уверены, что всё получится
❤31👍4
Если брать больше трех недель отпуска в год, есть шансы прожить дольше - к такому выводу пришли ученые из Хельсинского университета в течение 40 летнего эксперимента.
А значит, у вас будет больше времени для изучения Swift⚰️
О том, почему важно отдыхать и как это делать правильно читайте в статье
А значит, у вас будет больше времени для изучения Swift⚰️
О том, почему важно отдыхать и как это делать правильно читайте в статье
Т—Ж
Способы перезагрузиться за выходные
И набраться сил
😁10🤔3👍2
Неблокирование потоков - одна из главных особенностей async / await. В статье приводятся наглядные примеры, как можно ускорить работу приложения переделав с GCD на async / await.
Бонусом рассказывается чем ограничено количество потоков async / await, зачем это сделано и когда все же лучше использовать GCD.
Жаль, что async / await недоступен в objective-c, ведь Swift deprecated 😬
Бонусом рассказывается чем ограничено количество потоков async / await, зачем это сделано и когда все же лучше использовать GCD.
Жаль, что async / await недоступен в objective-c, ведь Swift deprecated 😬
Хабр
Async/await в iOS: что нам дает неблокирование потоков
Разработчикам, только начинающим работать с Async/await, бывает довольно сложно разобраться в главной его особенности — неблокировании потоков. Из-за этого возникает непонимание, чем работа с потоками...
👍13🔥5👏1
Что вы используете в своих проектах?
Anonymous Poll
54%
GCD
17%
Новая модель работы с Concurrency - async / await и тд
2%
NSThread’ы и компания
6%
NSOperation
37%
Посмотреть результаты
В SwiftUI можно легко реализовать поддержку Drag and drop.
Для этого нужно:
• добавить модификатор dropDestination() и обработать перетаскиваемые данные
• добавить модификатор draggable() для данных, которые вы хотите перетаскивать
Подробнее в статье
Для этого нужно:
• добавить модификатор dropDestination() и обработать перетаскиваемые данные
• добавить модификатор draggable() для данных, которые вы хотите перетаскивать
Подробнее в статье
Hacking with Swift
How to support drag and drop in SwiftUI - a free SwiftUI by Example tutorial
Learn Swift coding for iOS with these free tutorials
👍9❤3
This media is not supported in your browser
VIEW IN TELEGRAM
В статье на примере функции receive(on:options:) фреймворка Combine показывается отличие между DispatchQueue.main и RunLoop.main.
Задача стандартная - загрузка картинки в момент, когда пользователь взаимодействует с UI, например, скролит UIScrollView.
На GIF'ке слева используется RunLoop.main, а справа DispatchQueue.main
Задача стандартная - загрузка картинки в момент, когда пользователь взаимодействует с UI, например, скролит UIScrollView.
👍27🔥1
Как долго вы в коммерческой разработке?
Это поможет публиковать более релевантный контент
Это поможет публиковать более релевантный контент
Anonymous Poll
48%
Ещё учусь
15%
0-1 год
17%
1-3 года
5%
3-5 лет
6%
5+
3%
Не разработчик (QA, PM и тд)
6%
Посмотреть результаты
👍2
Apple выпустили курс по SwiftUI, UIKit, работе с сетью, кешированию и тестам.
Курс расcчитан на 15 часов, но некоторые части можно пропустить или пройти быстрее. Подходит новичкам, но также будет полезен тем, кто хочет освежить знания
Редакция канала настоятельно рекомендует к ознакомлению
Курс расcчитан на 15 часов, но некоторые части можно пропустить или пройти быстрее. Подходит новичкам, но также будет полезен тем, кто хочет освежить знания
Редакция канала настоятельно рекомендует к ознакомлению
🔥40👍8❤3❤🔥1
EasySwift iOS🍏 pinned «Держим в курсе: 👉Теперь можно предложить статью, новость или любимый мем об IT в чат боте 👉Теперь можно оставлять комменты под постами и общаться в чате тут»
В чате задали вопрос - как пройти по всем значениям кортежа и выбрать одно, соответcтвующее условию.
Простого решения для этой задачи нет, но можно использовать рефлексию, которая в Swift представлена структурой Mirror.
О том что такое рефлексия и как её использовать читайте в статье
Простого решения для этой задачи нет, но можно использовать рефлексию, которая в Swift представлена структурой Mirror.
О том что такое рефлексия и как её использовать читайте в статье
👍22🔥1🤡1
Пример реализации крутого поиска в приложении на SwiftUI с помощью модификатора .searchable
Подробнее о том, как затянуть поиск в своё приложение в гайдах Apple
Подробнее о том, как затянуть поиск в своё приложение в гайдах Apple
kean.blog
Search
Search, filter, sort, group, pin
👍9😁1
Ловите статью об основных компонентах Combine, реактивном программировании и плюсах и минусах подхода.
Если вы ещё не знакомы с реактивным программированием, эта статья для вас.
Если вы ещё не знакомы с реактивным программированием, эта статья для вас.
Хабр
Combine: часть 1. Погружение в реактивное программирование
Привет, Хабр! Меня зовут Сергей, я iOS-разработчик в компании SimbirSoft. Уже наступил 2023 год, а обсуждения на тему выбора инструмента для обработки асинхронных событий не утихают. На сцене...
👍21
Что мы увидим в консоли в первом принте и что во втором?
Если не знаете как безопасно работать с ArraySlice коллекций, советуем статью.
А для тех, кто знает, но решил себя проверить или пытается угадать ответ:
1.[2, 7, 15, 8, 1]
2. Fatal error: Array index is out of range
Если не знаете как безопасно работать с ArraySlice коллекций, советуем статью.
А для тех, кто знает, но решил себя проверить или пытается угадать ответ:
1.
👍24
Находитесь ли вы в поиске работы?
Anonymous Poll
10%
🙅♂️ Нет, нашел идеальную работу
32%
🧑🎓 Еще учусь, но скоро планирую искать
20%
🤔 Активно не ищу, но открыт к новым возможностям
24%
👨💻 Да, сейчас в поисках
14%
👀 Посмотреть результаты
👍1
В чем отличие между первым и вторым примером? Выполнится ли метод doSomething?
Responder Chain - тема, которую любят спрашивать на собеседованиях. О том, что такое Responder Chain и как он устроен «под капотом» в статье
Responder Chain - тема, которую любят спрашивать на собеседованиях. О том, что такое Responder Chain и как он устроен «под капотом» в статье
👍20❤🔥1