Как iOS 16 ускоряет запуск вашего приложения.
Эти улучшение связано с ускорением проверок протоколов, которые были медленными. Кроме того, в iOS 16 сокращается время загрузки двоичного файла за счет уменьшения объема данных, загружаемых с диска. Об этом вы также можете прочитать в предыдущей статье.
https://is.gd/CgCtJU
Эти улучшение связано с ускорением проверок протоколов, которые были медленными. Кроме того, в iOS 16 сокращается время загрузки двоичного файла за счет уменьшения объема данных, загружаемых с диска. Об этом вы также можете прочитать в предыдущей статье.
https://is.gd/CgCtJU
Emergetools
Emerge Tools Blog | The Surprising Cost of Protocol Conformances in Swift
A deep dive into the Swift runtime to see how protocol conformance checks slow down post-main startup time as your binary size increases.
🔥2
Решить, какую структуру данных использовать для представления заданного набора значений, часто бывает намного сложнее, чем кажется
Стандартная библиотека Swift поставляется с тремя основными структурами данных — Array, Dictionary и Set, каждая из которых имеет свой набор оптимизаций, плюсов и минусов.
Подробнее про типы коллекций, можно озанакомиться в данной статье.
https://habr.com/ru/company/otus/blog/468239/
Стандартная библиотека Swift поставляется с тремя основными структурами данных — Array, Dictionary и Set, каждая из которых имеет свой набор оптимизаций, плюсов и минусов.
Подробнее про типы коллекций, можно озанакомиться в данной статье.
https://habr.com/ru/company/otus/blog/468239/
Хабр
Выбираем правильную структуру данных в Swift
И снова здравствуйте. Прежде чем уйти на выходные хотим поделиться с вами переводом материала, который был подготовлен специально для базового курса «iOS-разрабо...
🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
🛠Одним из не то, чтобы новых, но незаменимых классов в UIKit является
Если вы не знаете, что такое bottom sheet, откройте встроенное приложение «Карты», чтобы посмотреть. На нем отображается bottom sheet, на котором пользователи могут выполнять поиск и получать доступ к сохраненным местоположениям. Вы можете развернуть и свернуть его. Также этот тип шаблона пользовательского интерфейса можно найти в некоторых популярных приложениях, таких как Google Maps, Twitter и Instagram.
🔴 Теперь к коду.
Вы можете указать размер контроллера, установив свойство
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
Руководство по современному асинхронному программированию
https://quickbirdstudios.com/blog/async-await-combine-closures/
https://quickbirdstudios.com/blog/async-await-combine-closures/
QuickBird Studios
Combine, Closures: A Guide to Modern Asynchronous Swift
A comparison between async/await, Combine, and closures in Swift. Includes an overview of the strengths and weaknesses of the different approaches.
🔥5
Коротенькая, но очень полезная статья с парой фишек для дебага в Xcode 🔨
Тут есть и совсем простые вещи вроде
В общем переходите по ссылке и смотрите. Всего несколько минут, зато что-то полезное можно узнать! 👍
https://medium.com/@dbelannab/xcode-debugging-tips-and-tricks-c2f4db49553e
Тут есть и совсем простые вещи вроде
po
команды в логе (я удивлён, но очень многие об этом почему-то не знают) и symbolic breakpoint
, до более интересных и менее популярных вещей из разряда команды v
для того же lldb
и изменений при дебаге без необходимости пересобирать проект 🔥В общем переходите по ссылке и смотрите. Всего несколько минут, зато что-то полезное можно узнать! 👍
https://medium.com/@dbelannab/xcode-debugging-tips-and-tricks-c2f4db49553e
Medium
Xcode Debugging tips and tricks
As a lazy software engineer, I always look for shortcuts to complete my tasks. And since we spend half of our times debugging let me share…
👍5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Кастомный TabBar
Статья состоит из трёх частей, как реализовать вот такой таббар.
https://betterprogramming.pub/how-to-create-a-nice-uitabbar-for-your-ios-app-using-swift-5-pt-1-f9d2d5450909
Статья состоит из трёх частей, как реализовать вот такой таббар.
https://betterprogramming.pub/how-to-create-a-nice-uitabbar-for-your-ios-app-using-swift-5-pt-1-f9d2d5450909
🎉4❤2
Про базовые знаниям в Swift, сложно не вспомнить про классы и структуры
Об этом часто спрашивают на собеседованиях и обычно не ограничиваются одним-двумя вопросами.
Давайте разбираться!
https://medium.com/hash-coding/swift-structures-and-classes-part-1-582e26bdf8dd
Об этом часто спрашивают на собеседованиях и обычно не ограничиваются одним-двумя вопросами.
Давайте разбираться!
Structs
vs Classes
https://medium.com/hash-coding/swift-structures-and-classes-part-1-582e26bdf8dd
Medium
Swift — Structures and Classes — Part 1
This forms a very common question for almost all the iOS interviews. This is because it plays a significant role in choosing the right…
❤7
Ох, что-то интересное про коллекцию, верстку. Очень годная статья, летс го
https://habr.com/ru/post/495076/
https://habr.com/ru/post/495076/
Хабр
Compositional Layout в iOS 13. Основы
Добрый день, На практике iOS разработчик часто сталкивается с задачей показа большого количества информации в виде списка или в виде коллекции, как правило, для этого отлично подходят UITableView или...
🔥7👎1
Статические свойства и методы
Кроме свойств, которые относятся к отдельным экземплярам класса, мы можем определять свойства, которые относятся ко всему типу - свойства типа. Для объявления статических методов и свойств типа используется ключевое слово static. Доступ к ним осуществляется из самого типа, а не из экземпляра.
Кроме свойств, которые относятся к отдельным экземплярам класса, мы можем определять свойства, которые относятся ко всему типу - свойства типа. Для объявления статических методов и свойств типа используется ключевое слово static. Доступ к ним осуществляется из самого типа, а не из экземпляра.
👍9
Работа с навигацией, координатором, передачей данных. Крутая статья с примерами кода
https://www.hackingwithswift.com/articles/175/advanced-coordinator-pattern-tutorial-ios
https://www.hackingwithswift.com/articles/175/advanced-coordinator-pattern-tutorial-ios
Hacking with Swift
Advanced coordinators in iOS
Child coordinators, navigating backwards, passing data between view controllers, and more.
👍5
Большая и оочень хорошая статья о работе с кастомными шрифтами в iOS
И примеры кода, и результата, и объяснение, как это всё работает, скрины с
Статья в первую очередь про поддержку
https://medium.com/@hdmdhr/use-dynamic-type-with-custom-fonts-in-ios-480d9c902689
И примеры кода, и результата, и объяснение, как это всё работает, скрины с
debug view hierarchy
и всё всё всё, что нужно знать 🔥Статья в первую очередь про поддержку
dynamic type
- это когда в настройках размер шрифта на уровне всей системы меняют. Но полезно будет всем, кто использует кастомные шрифты https://medium.com/@hdmdhr/use-dynamic-type-with-custom-fonts-in-ios-480d9c902689
Medium
Use Dynamic Type with Custom Fonts in iOS
Use a enum to manage custom fonts, and simplify the usage.
🤯3❤1
Понимаем архитектуру VIPER
VIPER — это архитектура. Она снижает сложность, особенно в больших проектах. Целью архитектуры является разделение операционного кода внутри проекта, модулеризация и регуляризация. В основном она использует протоколы, поскольку межуровневая связь в шаблоне VIPER обеспечивается протоколами.
https://apptractor.ru/develop/ponimaem-arhitekturu-viper.html
VIPER — это архитектура. Она снижает сложность, особенно в больших проектах. Целью архитектуры является разделение операционного кода внутри проекта, модулеризация и регуляризация. В основном она использует протоколы, поскольку межуровневая связь в шаблоне VIPER обеспечивается протоколами.
https://apptractor.ru/develop/ponimaem-arhitekturu-viper.html
AppTractor
Понимаем архитектуру VIPER
Существует множество шаблонов проектирования, таких как MVI, MVP, MVVM и т.д. Все они имеют свои преимущества и недостатки. В зависимости от размера вашего проекта, вы можете выбрать тот или другой. В этой статье я попытаюсь на примере объяснить шаблон проектирования…
🔥7❤2
URLSession
- вещь, которую все используют в своих приложениях, но мало кто глубоко копался, что там можно настроить и для чего.URLSessionConfiguration
https://www.avanderlee.com/swift/urlsessionconfiguration/
SwiftLee
URLSessionConfiguration: Exploring opt-in configurations
URLSession uses a default URLSessionConfiguration for common use cases, but there's room to maximize network performance by opt-in settings.
🔥11
Диспетчеризация.
Статья где показана практическая её реализация и отличная теория.
https://habr.com/ru/company/simbirsoft/blog/673636/
Статья где показана практическая её реализация и отличная теория.
https://habr.com/ru/company/simbirsoft/blog/673636/
Хабр
Диспетчеризация в Swift: погружение в теорию и практику
Все iOS-разработчики так или иначе сталкиваются с диспетчеризацией ( Method Dispatch ), но далеко не каждый понимает, как это работает. Зная, как проходит процесс диспетчеризации под капотом...
👍7❤3
Управление памятью — важная тема в Swift и iOS-разработке.
Cуществует множество руководств, объясняющих, когда следует использовать weak self в замыканиях.
Статья говорит о том, когда утечка памяти может произойти, и как её избежать.
https://benoitpasquier.com/weak-self-story-memory-management-closure-swift/
Cуществует множество руководств, объясняющих, когда следует использовать weak self в замыканиях.
Статья говорит о том, когда утечка памяти может произойти, и как её избежать.
https://benoitpasquier.com/weak-self-story-memory-management-closure-swift/
Benoit Pasquier
Weak self, a story about memory management and closure in Swift
Memory management is a big topic in Swift and iOS development. If there are plenty of tutorials explaining when to use weak self with closure, here is a short story when memory leaks can still happen with it.
🔥3👍1
Стек
В любом приложении или сайте есть функция «Отмена». А вы не задумывались как она работает?
Смысл такой: в программе сохраняются предшествующие состояния вашей работы (количество сохраняемых состояний ограничено), причем, они располагаются в памяти в таком порядке: последний сохраненный элемент идет первым.
Здесь и нужно использоваться стек т.к. одним массивом задачу решить не получится.
Лучшая аналогия — высокая стопка книг. Если вам нужна какая-то книга, лежащая около центра стопки, вам сначала придется снять все книги, лежащие выше. Именно так работает принцип LIFO.
В любом приложении или сайте есть функция «Отмена». А вы не задумывались как она работает?
Смысл такой: в программе сохраняются предшествующие состояния вашей работы (количество сохраняемых состояний ограничено), причем, они располагаются в памяти в таком порядке: последний сохраненный элемент идет первым.
Здесь и нужно использоваться стек т.к. одним массивом задачу решить не получится.
Лучшая аналогия — высокая стопка книг. Если вам нужна какая-то книга, лежащая около центра стопки, вам сначала придется снять все книги, лежащие выше. Именно так работает принцип LIFO.
🔥9
Alamofire
Нативный инструмент для обработки данных с сервера - URLSession, но работать с ним немного сложнее, чем хотелось бы. Для облегчения этого процесса существует framework Alamofire — это обвертка над URLSession, которая сильно упрощает жизнь при работе с сервером
Cтатья которая рассказывает как пользоваться данной либой.
https://habr.com/ru/post/330760/
Нативный инструмент для обработки данных с сервера - URLSession, но работать с ним немного сложнее, чем хотелось бы. Для облегчения этого процесса существует framework Alamofire — это обвертка над URLSession, которая сильно упрощает жизнь при работе с сервером
Cтатья которая рассказывает как пользоваться данной либой.
https://habr.com/ru/post/330760/
Хабр
Работа с сервером с помощью Alamofire на Swift
Сразу хочу сказать, данная статья предназначена прежде всего для новичков. Здесь не будет best practice, создание сервисов, репозиториев и прочей оптимизации ко...
👍9
Request
1️⃣Запрос — это объект, содержащий всю необходимую информацию для того, чтобы сервер точно понял, какую информацию вы хотите запросить. Структура запроса может содержать следующие пункты:
2️⃣Header (заголовки запроса) — техническая информация, не имеющая отношения к сути запроса. К хедерам часто относят информацию о модели айфона, версии iOS, текущей версии приложения и т.д.
3️⃣Метод запроса, отражающий то, какие действия вы собираетесь произвести. GET ( получить данные), POST (создание данных), PUT (обновление данных), DELETE (удаление данных) и др.
4️⃣URL (адрес запроса) — адрес, по которому вы собираетесь отправить запрос. Например, чтобы получить список ваших подписчиков VK, нужно отправить запрос по адресу:
Response
Ответ от сервера приходит в формате JSON, который представляет собой совокупность пар ключ-значение.
{
'id':210700286,
'first_name':'Николай',
'last_name':'Иванов'
}
1️⃣Запрос — это объект, содержащий всю необходимую информацию для того, чтобы сервер точно понял, какую информацию вы хотите запросить. Структура запроса может содержать следующие пункты:
2️⃣Header (заголовки запроса) — техническая информация, не имеющая отношения к сути запроса. К хедерам часто относят информацию о модели айфона, версии iOS, текущей версии приложения и т.д.
3️⃣Метод запроса, отражающий то, какие действия вы собираетесь произвести. GET ( получить данные), POST (создание данных), PUT (обновление данных), DELETE (удаление данных) и др.
4️⃣URL (адрес запроса) — адрес, по которому вы собираетесь отправить запрос. Например, чтобы получить список ваших подписчиков VK, нужно отправить запрос по адресу:
Response
Ответ от сервера приходит в формате JSON, который представляет собой совокупность пар ключ-значение.
{
'id':210700286,
'first_name':'Николай',
'last_name':'Иванов'
}
🔥10👍2❤1