
- Главная
- Каталог
- Интернет технологии
- Библиотека мобильного разработчика
Библиотека мобильного разработчика
Полезные материалы по всему, что может быть интересно мобильному разработчику.
Статистика канала
Android-разработчик Middle+ — от 250 000 до 300 000 ₽, удалёнка
Разработчик iOS — от 350 000 ₽, офис (Краснодар)
Android-разработчик — удалёнка
Мобильный разработчик (Flutter/React Native) | Affiliate — удалёнка
Middle+ iOS developer — удалёнка
#свежак
Работая с
TextField в SwiftUI, вы наверняка сталкивались с необходимостью валидации или форматирования текста «на лету». Стандартный подход — отслеживать изменения в onChange и сразу же исправлять значение в том же @Binding. Это работает, но у него есть неприятный побочный эффект.🔹 В чём проблема?
Когда вы изменяете тот же
@Binding, который отслеживаете, внешние наблюдатели (например, ваша ViewModel) сначала видят «сырое» значение, а затем — исправленное. Это может привести к нежелательным срабатываниям логики вроде didSet на временно некорректных данных.Классический пример с ограничением длины:
TextField("Name", text: $vm.name)
.onChange(of: vm.name) { _, newValue in
if newValue.count > 4 {
vm.name = String(newValue.prefix(4)) // Обрезаем
}
}
Если пользователь введёт
Flower, ваша ViewModel увидит последовательность: "Flow" → "Flowe" → "Flow". Несмотря на то, что в UI в итоге отображается "Flow", логика в didSet успеет отработать с промежуточным некорректным значением "Flowe".🔹 Решение: буферизация ввода
Ключевая идея — разделить внутренний буфер для
TextField и внешний @Binding, в который передаётся уже очищенное значение. Таким образом, остальная часть приложения всегда работает только с валидными данными.Реализация компонента
CustomTextField:struct CustomTextField: View {
@Binding var text: String // Внешний, "чистый" биндинг
let maxLength: Int
@State private var internalText: String = "" // Внутренний буфер для поля ввода
var body: some View {
TextField("Введите текст", text: $internalText)
.onAppear { sync(from: text) }
// Путь пользовательского ввода: внутренний -> фильтрация -> внешний
.onChange(of: internalText) { _, newValue in
let filtered = String(newValue.prefix(maxLength))
if internalText != filtered { internalText = filtered }
if text != filtered { text = filtered }
}
// Путь внешних обновлений (сброс, восстановление): внешний -> внутренний
.onChange(of: text) { _, newValue in
sync(from: newValue)
}
}
private func sync(from external: String) {
let filtered = String(external.prefix(maxLength))
if internalText != filtered { internalText = filtered }
if text != filtered { text = filtered }
}
}
🔹 Как это работает на практике?
1. Пользователь печатает — текст попадает в
internalText.2. В
onChange значение мгновенно обрезается (filtered).3. Только это обрезанное значение передаётся во внешний
@Binding (text).4.
ViewModel видит исключительно валидную последовательность: "F" → "Fl" → "Flo" → "Flow".🔹 Итог
Использование внутреннего буфера для
TextField — это мощный паттерн для чистого разделения ответственности. Он гарантирует, что бизнес-логика вашего приложения будет работать только с уже обработанными, корректными данными, избегая шума и побочных эффектов от промежуточных состояний.#PixelPerfect #MiddlePath #Swift
Typhoon — это современный, легковесный фреймворк на Swift, предоставляющий элегантные и надежные политики повторных попыток для асинхронных операций. Созданный на основе модели параллельного выполнения async/await от Swift, он помогает корректно обрабатывать временные сбои с помощью настраиваемых стратегий повторных попыток.
Фичи:
Кроссплатформенность — работает на iOS, macOS, tvOS, watchOS и visionOS
#буст #iOS
При работе из дома обстановка имеет решающее значение. Правильно организованное рабочее место помогает сосредоточиться, снизить усталость и повысить эффективность.
Вот 10 чит-кодов для твоего домашнего офиса: как убрать физиологические барьеры, чтобы продуктивность включалась сама собой, без насилия над организмом.
#свежак
Может ли Kotlin Multiplatform сократить трудозатраты при разработке одного продукта под несколько платформ? Вычисления говорят, что да, на 21%. Автор расскажет это на примере хобби-проекта GitBudget для Android + iOS.
#свежак
git cherry – находим незамерженные коммиты между веткамиУмная команда, которая показывает коммиты из одной ветки, которых нет в другой. Идеально для проверки, какие изменения ещё не попали в основную ветку или что уже можно мержить.
1. Проверка перед мержем:
# Что мы собираемся мержить из feature в main?
git cherry -v main feature/payment
# Вывод:
+ abc1234 Add payment processing
+ def5678 Fix credit card validation
- ghi8901 Update README (уже есть в main)
2. Поиск потерянных коммитов:
# Есть ли в моей ветке коммиты, которых нет в upstream?
git cherry -v origin/main my-feature
3. Синхронизация веток:
# Проверить, все ли коммиты из dev есть в staging?
git cherry staging dev
С абстрактными коммитами (показывает эквиваленты):
git cherry --abbrev=7 main feature/login
Только подсчёт:
# Сколько незамерженных коммитов?
git cherry main feature/login | wc -l
Игнорирование тривиальных различий:
# Git попытается найти эквивалентные коммиты
git cherry --no-merges main feature/login
#буст #MiddlePath
Отзывы канала
всего 2 отзыва
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Библиотека мобильного разработчика — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 9.4K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 9.3, количество отзывов – 2, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 20559.42 ₽, а за 9 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий