ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

iOS Dev

iOS Dev

Открыть в Telegram

👨‍💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift

Больше
7 973
Подписчики
+524 часа
+337 дней
+6030 дней
Архив постов
iOS Dev
7 974
Применение default для подсчёта количества символов в строке Задача подсчёта символов в строках является одним из потенциальн
Применение default для подсчёта количества символов в строке Задача подсчёта символов в строках является одним из потенциальных вопросов во многих алгоритмических секциях. Вы можете легко установить значение по умолчанию для ключа в словаре. Для этого как раз можно воспользоваться ключевым словом default. 🛠 На скриншоте я показал два способа для подсчёта повторений букв в строке «Hello iOS Devs». 💼 Конечно, вариантов подсчёта может быть намного больше, но всегда полезно расширить свой инструментарий.

iOS Dev
7 974
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один по
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь. Для Swift ❤️ 63% любят этот язык,😱 37% считают его неприятным. 💵 Медианная зарплата составляет $ 78 468 в год. Для Objective-C ❤️ 24% любят, 😱 76% считают его неприятным. 💵 Медианная зарплата $ 83 165 в год. Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅. 🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень. 💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.

iOS Dev
7 974
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один по
На StackOverflow выпустили большой, вернее, ОГРОМНЫЙ отчёт по результатам опроса более 70 000 разработчиков. Собрал в один пост выжимку по фактам для Swift и Objective-C, больше графиков и сравнений можно посмотреть здесь. Для Swift ❤️ 63% любят этот язык,😱 37% считают его неприятным. 💵 Медианная зарплата составляет $ 78 468 в год. Для Objective-C ❤️ 24% любят, 😱 76% считают его неприятным. 💵 Медианная зарплата $ 83 165 в год. Может на нём не так приятно писать, но пять тысяч долларов это пять тысяч долларов 😅. 🛠 Удовлетворённость средой разработки Xcode равная, 50% считают его годным инструментом, а 50% не очень. 💪Лидеры по зарплатам Closure и Erlang — разработчикам, пишущим на одном из этих языков, платят в среднем $ 100 000 в год.

iOS Dev
7 974
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏 📺 Многие пользователи смотрят, сколько звезд у при
Стратегии обращения к пользователям с просьбой оценить ваше приложение 👏 📺 Многие пользователи смотрят, сколько звезд у приложения, прежде чем принять решение о его загрузке. 📖 В этой статье рассказывается про один из подходов. Что НЕ следует делать 🔴 Показывать алерт при запуске. 🔴 Показывать его слишком рано. 🔴 Показывать при любом общем для всех действии. Стратегии получения максимальной отдачи 🟢 Ориентироваться на уникальное действие в приложении. 🟢 Совмещать оценку с существующими. Например, если пользователь уже что-то положительно оценил в вашем приложении. 🟢 Внедрите систему, основанную на весе, для управления отображением ваших алертов. Например: — Открытие твита 1 балл. — Лайк твита 3 балла. — Создание твита 5 баллов. Если пользователь достигнет нужного порога — показываем запрос. 🙋Но вы должны использовать этот инструмент очень эффективно, потому что он очень ограничен, и если вы не будете осторожны, это может привести к печальному результату.

iOS Dev
7 974
Продвинутые анимации в SwiftUI 📖 В цикле статей авторы погружаются в некоторые продвинутые техники создания анимации SwiftUI. Подробно рассказывается о протоколе Animatable, его верном спутнике animatableData, мощном и часто игнорируемом GeometryEffect и протоколе AnimatableModifier. Все эти темы не слишком хорошо описаны в официальной документации и не очень часто упоминаются в постах и статьях о SwiftUI. Тем не менее, они предоставляют нам инструменты для создания довольно красивых анимаций. 1️⃣ Часть первая — Paths. 2️⃣ Часть вторая — GeometryEffect. 3️⃣ Часть третья — AnimatableModifier. 🛠 Все статьи насыщены примерами, а исходный код можно найти на гитхабе.

iOS Dev
7 974
Equality в Swift: протокол Equatable, объяснение и примеры 🧐 Проверка того, считаются ли два объекта или значения равными, о
Equality в Swift: протокол Equatable, объяснение и примеры 🧐 Проверка того, считаются ли два объекта или значения равными, определенно является одной из наиболее часто выполняемых операций во всем программировании. 💻 Одним из наиболее интересных аспектов реализации равенства в Swift является то, что все это сделано протокольно-ориентированным способом — это означает, что любой тип может стать равнозначным, соответствуя протоколу Equatable. 📖 Например, в этой статье рассматривается, как Swift моделирует концепцию равенства и как эта модель различается между типами значений и ссылок.

iOS Dev
7 974
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone ⚪ Однобуквенные и двухбуквенные комбинации были просто хардкодом. Тяжело поверить, но это правда. При вводе «ik» всегда была автокоррекция на «ok». ⚪ Автокоррекция на оригинальном iPhone была очень простой. Оно всегда соответствовала количеству набранных вами букв — автодополнения не было. Если вы введете 5 букв, в качестве исправлений будут предлагаться только слова из 5 букв… Кроме сокращений, код алгоритма также мог добавлять апостроф. ⚪ Как только вы набирали третью букву в слове, алгоритм просматривал места ваших касаний и строил путь, который больше всего был похож на созвездие, и пытался сопоставить этот шаблон с идеальным центральным попаданием по клавишам для всех слов в словаре. Ближайшее совпадение побеждало. Если это слово отличалось от того, что вы напечатали, а самого слова не было в словаре иначе или оно было настолько непопулярным в языке, чем совпадающее слово, автоисправление предлагало изменение. С точки зрения памяти и вычислений, это было почти все, что команда могла себе позволить на оборудовании в то время. Алгоритм просто делал свою работу. ⚪ У Кена появилась идея сопоставить тип клавиатуры с каждым текстовым полем — например, при нажатии на поле с номером телефона будет отображаться цифровая клавиатура. А ещё временные названия вроде: text input traits, return key type и другие. Примечание: ну, как временное 😂 ⚪ На оригинальной клавиатуре iPhone нужна была клавиша удаления в правом верхнем углу (как на более привычных десктопных клавиатурах). Но она просто-напросто не помещалась, поэтому Кен переместил её на третий ряд, где было место. Кроме того, третий ряд клавиш не смещен относительно второго ряда. Сейчас же нам кажется, что так и нужно👏. ⚪ Кен реализовал словарь автозамены iPhone. Он начал со старых списков слов, которые Apple хранила на редко посещаемых внутренних сайтах. Затем были добавлены всевозможные «дополнения». Названия продуктов (с заглавными буквами: iMac). Названия спортивных команд, затем сленговые сокращения (с Dont -> Don’t). И так далее. ⚪ При разработке команда поняла, что система автозамены может предлагать запрещённые (матерные) слова, поэтому был добавлен список таких выражений с установленным битом для тех записей, которые гласили: «никогда не выполнять автозамену этих слов». Вы могли напечатать их точно, но вот клавиатура в этом бы не помогла. ⚪ В оригинальном iPhone не было cut/copy/paste. Печально известный факт имеет простое объяснение. У Кена не было времени сделать это правильно: он объясняет это тем, что было слишком много работы с клавиатурой, автоисправлением и текстовой системой в целом. У команды дизайнеров тоже не было времени. Так оно и ушло в прод. ⚪ Кривизна пальцев заставляет вас думать, что вы касаетесь экрана выше, чем на самом деле. Поэтому прикосновения определяются с учетом этого. Вот почему даже сегодня трудно определить точку касания, если держать телефон вверх ногами. ⚪ Оригинальный iPhone не имел виртуальной памяти. Некоторые люди придумали систему под названием «Jetsam». Поскольку показывалось только одно приложение за раз, сначала завершали фоновые программы, когда не хватало памяти. Эти программы перезапускались, а не возобновлялись при возвращении на передний план. Не могу не поделиться найденным комментарием на эту тему: И вся нужная структура была разработана позже, чтобы автоматически сохранять и восстанавливать состояние приложения, создавая иллюзию того, что приложение работало все время. Фух! Вот такое небольшое путешествие во времени. Если вы хотите больше необычных фактов, то они есть в книге «Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs». И, конечно, в нашем канале: @iOS Dev

iOS Dev
7 974
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iP
+3
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone Разработка это не только написание кода, но и различные подходы к алгоритмам и решению тех или иных задач. Иногда я встречаю интересные факты или алгоритмы, но ещё более важно — истории программистов, особенно тех, кто стоял у истоков. Сегодня я собрал для вас подборку из фактов от программиста Apple, с работой которого каждый из нас сталкивается чаще, чем может показаться. Продолжение тут: 👇

iOS Dev
7 974
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iP
10 фактов про разработку первых айфонов от Кена Косиенды — сотрудника Apple с 15-летним опытом и изобретателя автозамены в iPhone Разработка это не только написание кода, но и различные подходы к алгоритмам и решению тех или иных задач. Иногда я встречаю интересные факты или алгоритмы, но ещё более важно — истории программистов, особенно тех, кто стоял у истоков. Сегодня я собрал для вас подборку из фактов от программиста Apple, с работой которого каждый из нас сталкивается чаще, чем может показаться. Продолжение тут: 👇

iOS Dev
7 974
Быстрый способ проверить созданную URL-схему (диплинк) в симуляторе c помощью терминала ⏳ Есть старый способ с использованием Safari, но он не так эффективен. Safari не запоминает последнюю добавленную схему, поэтому вам придется вводить её снова и снова. А переход между браузером и приложением делает ситуацию хуже, ещё и тратит время. 👌 Расскажу о другом способе. Вы наверняка знаете, что есть xcrun, который можно использовать для запуска любого инструмента внутри Xcode из командной строки. Опцией для способа ниже является simctl, который и поможет вам управлять симуляторами. Для этого можно использовать: xcrun simctl openurl booted <url> 💻 В качестве параметра url нужно использовать вашу ранее созданную схему. В моём примере это: exampleapp://test. Специально для @iOS Dev.

iOS Dev
7 974
Быстрый способ проверить, все ли элементы коллекции удовлетворяют заданному условию 👌 Со Swift 4.2 для этого можно использов
Быстрый способ проверить, все ли элементы коллекции удовлетворяют заданному условию 👌 Со Swift 4.2 для этого можно использовать метод allSatisfy(). 🟢 Если все элементы удовлетворяют заданному условию, то вызов allSatisfy() вернет true. 🔴Если хотя бы один элемент не пройдет наше условие, то результатом вызова allSatisfy() будет false.

iOS Dev
7 974
iOS Responder Chain: UIResponder, UIEvent, UIControl и их использование 🤔 Что вообще за зверь такой, responder, если я имею
iOS Responder Chain: UIResponder, UIEvent, UIControl и их использование 🤔 Что вообще за зверь такой, responder, если я имею дело с UITextFields? 🤔 Почему UIViews юзает сабкласс от UIResponder? 🤔 Вообще, в чем их смысл? В iOS Responder Chain — это название, данное сгенерированному UIKit связному списку объектов UIResponder, и это основа для всего, что касается событий (touch, motion). 🛠 Responder Chain — это то, с чем мы постоянно встречаемся при разработке, и хотя не так часто приходится иметь с ней дело напрямую, пожалуй, кроме манипуляций с клавиатурой UITextField, знание того, как она работает, позволяет решать связанные с событиями проблемы простыми/креативными способами. Вкратце, экземпляры UIResponder это объекты, которые могут обрабатывать и реагировать на произвольные события. Многие вещи в iOS являются UIResponder, включая UIView, UIViewController, UIWindow, UIApplication и UIApplicationDelegate. 📖 В этом материале рассказывается про это детальнее, и приводятся примеры использования.

iOS Dev
7 974
DoNilDisturb Swift Plugin 😎 Важно не терять фокус во время выполнения задач, но знаете, иногда всем нам нужен отдых (особенн
DoNilDisturb Swift Plugin 😎 Важно не терять фокус во время выполнения задач, но знаете, иногда всем нам нужен отдых (особенно ближе к вечеру пятницы). Решил поделиться с вами шуточным плагином, который не позволит вам билдить проекты в нерабочее время😂 Не у всех выходные в субботу и воскресенье, и не у всех рабочий день длится с 9 до 17 часов, но всё-таки! Опенсорсный DoNilDisturb Swift Plugin (nil, ахахах, ну вы поняли) делает именно это — не даёт вам запустить ваш проект в нерабочее время. Хороших вам выходных, iOS-разработчики❤️!

iOS Dev
7 974
Создание кастомного ParseableFormatStyle в iOS ⏳ Начиная с iOS 2.0, старый класс Formatter и его производные, такие как DateFormatter и NumberFormatter, были основным средством преобразования значений в строки и наоборот — из строк. С течением времени Apple добавила другие крутые форматеры, такие как ByteCountFormatter, MeasurementFormatter, RelativeDateTimeFormatter и ListFormatter. 📖 В этом посте рассматриваются развёрнутые возможности и приводятся примеры, как расширить ParseableFormatStyle и связанные с ним протоколы, чтобы создать собственный пользовательский форматер телефонных номеров. Затем его используют для фактического форматирования ввода текстовых полей. 🙌 И хотя в статье автор пишет про iOS, эти протоколы доступны в macOS, watchOS и tvOS.

iOS Dev
7 974
Grand Central Dispatch: многопоточность, очереди, параллелизм Grand Central Dispatch (GCD) - это низкоуровневый API для управ
Grand Central Dispatch: многопоточность, очереди, параллелизм Grand Central Dispatch (GCD) - это низкоуровневый API для управления параллельными операциями. Он может помочь улучшить скорость отклика вашего приложения, откладывая вычислительно дорогие задачи на задний план. Это более простая в работе модель, нежели блокировки и потоки. 📖 В этом материале по Grand Central Dispatch, состоящем из двух частей, вы узнаете все тонкости GCD и его Swifty API. ⚫ В первой части объясняется, что делает GCD, и демонстрируется несколько основных функций GCD. ⚫ Во второй части вы узнаете о некоторых расширенных функциях GCD. Вы будете работать над существующим приложением под названием GooglyPuff. GooglyPuff - это неоптимизированное, "потокобезопасное" приложение, которое накладывает «гугл-глаза» на обнаруженные лица, используя API Core Image для обнаружения лиц. 🛠 В рамках этих статей GCD поможет оптимизировать приложение и обеспечить безопасный вызов кода из разных потоков.

iOS Dev
7 974
Как сбросить UserDefaults в Swift? 👌 Мы можем использовать UserDefaults в наших приложениях для хранения некоторых базовых к
Как сбросить UserDefaults в Swift? 👌 Мы можем использовать UserDefaults в наших приложениях для хранения некоторых базовых конфигураций или настроек приложения. Вот только по мере усложнения проекта иногда нам может понадобится функция очистки всего конфига. 🤔 Мы можем использовать метод removeObject, чтобы удалить значение для определенного ключа (и сделать так для каждого). 🛠 Но что делать, если таких ключей у нас пара десятков? Тогда на помощь придёт системное API, в котором пригодится removePersistantDomainForName.

iOS Dev
7 974
Паттерн «Навигатор»: изучаем и осваиваем NavigationStack в SwiftUI 👨‍💻 SwiftUI — это декларативный фреймворк, позволяющий н
Паттерн «Навигатор»: изучаем и осваиваем NavigationStack в SwiftUI 👨‍💻 SwiftUI — это декларативный фреймворк, позволяющий нам создавать сложные пользовательские интерфейсы, определяя данные, отображаемые на экране. 🧭 Навигация была главной больной точкой фреймворка с самого первого дня. К счастью, после #WWDC22 ситуация изменилась, и SwiftUI теперь предоставляет новый API навигации на основе данных. 📖 В этом материале можно узнать, как использовать новый Navigation API для построения user flow — пути, которым могут воспользоваться пользователи внутри приложения.

iOS Dev
7 974
WWDC: Вопросы и ответы из Digital Lounges В некоторых источниках уже фигурировали ответы по SwiftUI, собранные из каналов Sla
WWDC: Вопросы и ответы из Digital Lounges В некоторых источниках уже фигурировали ответы по SwiftUI, собранные из каналов Slack по итогам общения разработчиков с работниками Apple. 📖 Пользователь твиттера по имени Emin пошёл дальше и создал ресурс со всеми темам из Digital Lounges. 👏 Из плюсов — хороший поиск и степень структурирования, а также потенциальное масштабирование. 🛠 Также вы можете внести и свой вклад в опенсорсный проект на гитхабе.

iOS Dev
7 974
Улучшение работы с closures в Swift 5.7 ⏳ Раньше Swift действительно боролся с любыми замыканиями, которые не были тривиальны
Улучшение работы с closures в Swift 5.7 ⏳ Раньше Swift действительно боролся с любыми замыканиями, которые не были тривиальными, но начиная с Swift 5.7 мы теперь можем писать код, как в первом примере. 😎 В новой версии было принято предложение SE-0326. Это сделало вывод типов менее неожиданным для разработчиков и устранило существующую ошибку в поведении. 👌 Речь здесь идёт о том, что добавление еще одного выражения или оператора в closure могло приводить к ошибке компиляции. Теперь такого не будет, и это хорошо.

iOS Dev
7 974
Различные методы удаления последнего элемента из массива в Swift 1️⃣ dropLast() let fruits = ["Apple","Orange","Banana"] let
Различные методы удаления последнего элемента из массива в Swift 1️⃣ dropLast() let fruits = ["Apple","Orange","Banana"] let nonRoundFruits = fruits.dropLast() print(nonRoundFruits) // ["Apple", "Orange"] Использование метода dropLast() удалит последний элемент и вернет оставшиеся. dropLast() является предпочтительным методом удаления массива, поскольку он безопасен, так как не изменяет исходный массив. 2️⃣ removeLast() var fruits = ["Apple","Orange","Banana"] let removedFruit = fruits.removeLast() print(fruits) // ["Apple", "Orange"] print(removedFruit) // Banana В отличие от метода dropLast(), метод removeLast() удаляет последний элемент из исходного массива и модифицирует его. 3️⃣ popLast() var fruits = ["Apple","Orange","Banana"] let removedFruit = fruits.popLast() print(fruits) // ["Apple", "Orange"] print(removedFruit) // Optional("Banana") 🧐 Метод popLast() похож на прошлый, но есть разница. Если в массиве нет элементов перед вызовом popLast(), краша не будет. Вместо этого вернётся nil.