Как стать автором
Обновить
3
0
Maximovic @anzmax

Enthusiastic iOS Learner

Отправить сообщение

Руководство по локализации для iOS

Время на прочтение6 мин
Количество просмотров33K

Локализация — это процесс, когда вы создаете для вашего приложения поддержку других языков. Часто вы сначала делаете приложение с англоязычным интерфейсом и затем локализуете его на другие языки, например, на японский.

Процесс локализации — трудоемкий, а его шаги потихоньку меняются по мере обновления XCode. Этот пост объясняет каждый шаг на основе последней версии XCode (7.3.1).

Переведено в Alconost
Читать дальше →

Что можно и что нельзя делать с Async/Await

Время на прочтение3 мин
Количество просмотров17K

Синтаксис async/await, введенный в Swift 5.5, значительно упростил асинхронное программирование, сделав его более доступным и интуитивно понятным. Однако, как и любой мощный инструмент, он может быть использован неправильно. Здесь я хочу рассмотреть пять распространенных ошибок, которые разработчики часто допускают при использовании async/await и предложить стратегии их избегания.

Ошибка 1: Необработка Ошибок

Асинхронные функции Swift могут вызывать ошибки, так же как и их синхронные аналоги. Однако многие разработчики, особенно те, кто только начинает работать с синтаксисом async/await, могут упускать обработку ошибок, что приводит к сбоям или непредсказуемому поведению.

Решение

Синтаксис do-catch в Swift - ключ к обработке ошибок из асинхронных функций. Обернув вызов асинхронной функции в блок do-catch, вы можете перехватить и обработать любые выброшенные ошибки, предотвратив сбои и обеспечивая предсказуемое поведение вашего приложения.

Читать далее

Решение любопытной цепочки задач c leetcode или сеанс древней алгоритмической магии с последующим разоблачением

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров6.7K

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

Читать далее

Работа со сложными JSON-объектами в Swift (Codable)

Время на прочтение10 мин
Количество просмотров15K

Написать эту статью меня сподвиг почти случившийся нервный срыв, причиной которого стало мое желание научиться общаться с сторонними API, конкретно меня интересовал процесс декодирования JSON-докуметов! Нервного срыва я, к счастью, избежал, поэтому теперь настало время сделать вклад в сообщество и попробовать опубликовать свою первую статью на Хабре.

Почему вообще возникли проблемы с такой простой задачей?

Чтобы понять, откуда проблемы, нужно сначала рассказать об инструментарии, которым я пользовался. Для декодирования JSON-объектов я использовал относительно новый синтезированный (synthesized) протокол библиотеки Foundation - Сodable.

Codable - это встроенный протокол, позволяющий заниматься кодированием в объект текстового формата и декодированием из текстового формата. Codable - это протокол-сумма двух других протоколов: Decodable и Encodable.

Cтоит сделать оговорку, что протокол называется синтезированным тогда, когда часть его методов и свойств имеют дефолтную реализацию. Зачем такие протоколы нужны? Чтобы облегчить работу с их подписанием, как минимум уменьшив количество boilerplate-кода.

Еще такие протоколы позволяют работать с композицией, а не наследованием!

Вот теперь поговорим о проблемах:

Читать далее

Параллельное программирование в Swift: Operations

Время на прочтение10 мин
Количество просмотров11K
В параллельном программировании в Swift: Основы Я представил множество низкоуровневых способов для управления параллелизмом в Swift. Первоначальная идея состояла в том, чтобы собрать все различные подходы, которые мы можем использовать в iOS в одном месте. Но при написании этой статьи я осознал, что их слишком много, чтобы перечислить в одной статье. Поэтому я решил сократить методы более высокого уровня.

image

Я упомянул Operations в одной из моих статей, но давайте рассмотрим их более внимательно.
Читать дальше →

Куда пойти, что читать, с кем общаться на профессиональные темы: дорожная карта для iOS-разработчика

Время на прочтение4 мин
Количество просмотров16K
В предыдущей статье я вскользь затрагивал тему развития мобильного разработчика. Когда вся твоя команда — это ты, это действительно острая тема. Некому помочь советом, поделиться интересной статьей или посоветовать годный видеокурс. Около года назад я решил бороться с этой проблемой и начал вести два Telegram-канала, в которых ежедневно публикую подборку самых актуальных материалов по iOS- и Android-разработке. За это время у меня накопилось множество отличных ресурсов, чатов, рассылок и событий, которыми стоит поделиться с сообществом. Начнем с iOS-разработки.


Читать дальше →

Делаем плавный скролл в нагруженных таблицах

Время на прочтение11 мин
Количество просмотров4.5K

Как часто вы обращали внимание на плавный скролл в мобильных приложениях?

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

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

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

Читать далее

Альтер эго. Как создать виртуальную личность и распознать фейк

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров23K


Я люблю общаться с ботами и владельцами фейковых аккаунтов в социальных сетях. В большинстве случаев они довольно милые и относительно безобидные. Порой даже интересно угадывать, что именно они попытаются впарить мне в очередной раз: тотализаторы, БАДы, лохотрон с криптой или недвижимость в Дубае? На днях я несколько часов обстоятельно общался с одной обаятельной девушкой, пока по ряду характерных признаков не убедился в том, что этот аккаунт — тоже фейковый. Признаюсь, раскусить подделку в этот раз было непросто: создатели липовых учёток научились придавать им определённую правдоподобность. Любопытства ради я захотел разузнать, как сейчас создаются виртуальные личности, какой софт и технологии для этого используются и существуют ли способы с ходу определить, что перед тобой не живой человек, а подделка?
Читать дальше →

WWDC 2023. Новый фреймворк SwiftData для управления данными. Эксперименты

Уровень сложностиСредний
Время на прочтение33 мин
Количество просмотров2.8K

Одним из заметных событий WWDC 2023 для разработчиков, программируемых на языке Swift, стало появление фреймворка SwiftData. В этой статье показано, как создать Схему данных в SwiftData, как выполнить CRUD операции (Create - Создать, Read - прочитать, Update - модифицировать, Delete - удалить), как выполнять запросы Query к данным с помощью предиката Predicate, как использовать "живой" запрос @Queryв SwiftUI и как его динамически настроить. Вы узнаете, как эффективно "закачивать" JSON данные в SwiftData хранилище без блокировки пользовательского интерфейса (UI).

Читать далее

UICollectionViewCompositionalLayout

Время на прочтение10 мин
Количество просмотров6K

В этой статье хочется познакомиться к UICollectionViewCompositionalLayout и с его помощью создать UICollectionView с прокручивающимися секциями, а затем еще немного более их кастомизировать, чтобы показать как просто с помощью UICollectionViewCompositionalLayout мы можем создавать UICollectionView, которые выглядят именно так как нам необходимо.

Статья основана на документации apple Implementing Modern Collection Views.

Compositional layouts - это декларативный вид API, который позволяет нам создавать большие макеты путем объединения небольших групп макетов. Compositional layouts имеют иерархию, состоящую из Item, Group, Sections, and Layout.

Чтобы создать любой Compositional layouts, необходимо реализовать следующие четыре класса:

NSCollectionLayoutSize: Размеры ширины и высоты относятся к типу NSCollectionLayoutDimension, которые могут быть определены путем установки доли ширины/высоты макета (в процентах по отношению к его контейнеру) или путем установки абсолютных или расчетных размеров.

NSCollectionLayoutItem: Это ячейка нашего макета, которая отображается на экране в зависимости от размера.

NSCollectionLayoutGroup: содержит NSCollectionLayoutItem в горизонтальной, вертикальной или пользовательской формах.

NSCollectionLayoutSection: используется для инициализации секции путем передачи NSCollectionLayoutGroup. Секции в конечном итоге составляют СompositionalLayout.

Читать далее

Begin /* Очевидность

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров5.2K

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

Я могу тут судить только по себе, возвращаясь к собственному становлению и личным ощущениям. Однако, в те далекие времена, когда джуном бы я, мало кто слышал про паттерны и рефакторинг. Но красивый и понятный код был всегда. Были книжки с листингами программ, были исходные коды открытых библиотек и фреймворков. Я тогда недоумевал, почему реальный код, даже написанный, в серьезных, по тогдашним меркам, отечественных организаций, настолько сильно отличается от образцового. Наверное, предполагал я, что напоказ люди пишут один код, а в свободное от написания умных книжек время садятся за компьютер и что-то очень непонятное, но как-то значительно лучше работающее.

Когда же код, написанный личной мной, начал попадать в бой и к коллегам, то стало понятно, что код то в основном пишут как раз не те люди, которые публикуют книги и статьи, а вот такие джуны. Средний кодер любого, сколь угодного крупного и серьезного проекта по определению джун. Их просто больше. Да, где-то мельком встречаются кусочки написанные более опытными товарищами, но их откровенно мало и они то чаще всего и представляют из себя скорее какие-нибудь библиотечки и фреймворки - не бизнес логика, не конкретные реализации и не все эти кошмарные базы данных.

Читать далее

Layout библиотека для iOS проектов

Время на прочтение2 мин
Количество просмотров1.3K

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

Читать далее

Большое расследование

Уровень сложностиСложный
Время на прочтение41 мин
Количество просмотров4.6K

1+2+3+4+5+6+7+8+9+10+11+...

Почему -1/12?

Автор, используя ChatGPT, накатал целую книгу. Читайте кому совсем не жаль своего времени. Кому жаль времени — даже не начинайте. Убийца садовник. В смысле, ответ на вопрос «сколько» вы уже знаете, зачем вам ответ на «почему»?

Город был тёмным и опасным местом, его улицы полны теней и тайн. Детектив знал это слишком хорошо, проведя годы в поисках истины. Но эта задача была другой, более сложной, чем любая, с которой он сталкивался раньше. Сидя в своем тускло освещенном кабинете, глядя на папку на столе, он не мог не думать о морали города. Это было место, где границы между добром и злом были размыты, где каждому было что скрывать, а правосудие часто было лишь мимолётной мечтой. Тем не менее, несмотря на все шансы против него, детектив знал, что должен попытаться. На кону стояли жизни, и он был их единственной надеждой.

* Рассказ в стиле нуар. Детективу дали сложное задание. Начинается с его рассуждений. Детектив упоминает мораль города. Напиши первый абзац.

(Ответ приведён выше)

Какой жанр у такого рассказа?

Немного о перечислениях в Swift

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров5.3K

Не секрет, что на сегодняшний день Swift обладает одними из самых (возможно самыми) функциональными и гибкими в настройке перечислениями. Каждый Swift-разработчик может подтвердить, что работать с ними довольно приятно и удобно. Однако, мало кто задумывается как это устроено внутри. Может показаться, что за подобную функциональность обязательно придётся заплатить либо производительностью, либо памятью, либо размером билда. На самом деле, чтобы максимально избежать подобных издержек, под капотом в языке имеется шесть разных реализаций перечислений.

Читать далее

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Mobile Application Developer
SWIFT
UIKit