Вот 10 ловушек Swift, которые кажутся безобидными — пока не настигнут вас.
Да, вам нужно обновлять пользовательский интерфейс в основном потоке. Но если вы слепо обернете все в
DispatchQueue.main.async
, вы рискуете столкнуться с условиями гонки или задержками обновлений.DispatchQueue.main.async {
self.label.text = "Updated"
}
Используйте это только в том случае, если вы уверены, что уже не находитесь в главном потоке.
Структуры (такие как
User
) копируются при присваивании. Классы совместно используются по ссылке.struct User {
var name: String
}
var a = User(name: "Abhinav")
var b = a
b.name = "Singh"
print(a.name) // Still "Abhinav"
Знайте, когда вам нужна неизменяемость (структура) и когда — общее состояние (класс). Их смешивание приводит к неприятным ошибкам.
Codable
в Swift — это замечательно… до тех пор, пока не изменится структура JSON и декодирование без предупреждения не завершится с ошибкой.struct User: Codable {
let id: Int
let name: String
}
Если бэкэнд отправит
user_id
вместо id
, декодирование завершится сбоем.Используйте
CodingKeys
явно, когда поля различаются:enum CodingKeys: String, CodingKey {
case id = "user_id"
case name
}
Простое добавление @Published не вызывает обновление пользовательского интерфейса вне основного потока или если обновление происходит косвенно.
@Published var name: String = ""
DispatchQueue.global().async {
self.name = "New" // No UI update
}
Всегда обновляйте свойства
@Published
в главном потоке:DispatchQueue.main.async {
self.name = "New"
}
Они кажутся похожими, но на самом деле это не так.
Any
означает любой тип. AnyObject
означает любой тип класса.func handle(data: Any) { ... } // Can be Int, String, Class, etc.
func handleObject(data: AnyObject) { ... } // Only class instances
Будьте точны в том, что вы используете. Использование
Any
может привести к путанице при преобразовании типов во время выполнения.Какие ловушки чаще вам встречаются? Пишите в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Представь: приходишь на собес, называешь зарплату, а HR сразу соглашается без торгов. Поздравляю — ты только что продешевил. Чтобы таких ляпов не было, рассказываем, как правильно определить свою стоимость на рынке труда.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9
От чего произошло название языка Kotlin?
Anonymous Quiz
3%
от английского слова "cotton"
78%
от острова близ Санкт-Петербурга
12%
от фамилии создателя языка
7%
от термина "code-tin"
❤5
Приготовили для вас дайджест по актуальному из мира iOS, Android и кроссплатформы.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Что выведет код?
Anonymous Quiz
16%
Function finished, Completion called, DataProcessor deinitialized
21%
Completion called, Function finished, DataProcessor deinitialized
10%
Function finished, DataProcessor deinitialized, Completion called
54%
Утечка памяти (DataProcessor никогда не освободится)
❤3
iOS разработчик — удалёнка
Senior Android Developer — от 270 000 ₽, удалёнка
Middle/Middle+ iOS Developer — 160 000 — 250 000 ₽, удалёнка
Flutter-разработчик (Умные бьюти-решения) — от 250 000 ₽, гибрид (Москва)
iOS-разработчик — от 250 000 ₽, удалёнка
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Реализация биометрии в мобильных приложениях
Традиционные методы аутентификации уступают биометрии по:
• Удобству (не нужно запоминать пароли)
• Безопасности (уникальные биометрические данные)
• Скорости входа в приложение
🔐 Android Implementation (Biometric API)
1. Добавьте зависимость:
2. Проверка доступности:
3. Запуск аутентификации:
👨💻 iOS Implementation (LocalAuthentication)
1. Проверка доступности:
2. Запрос аутентификации:
🛡 Безопасность и лучшие практики
1. Fallback механизмы:
• Предусмотрите резервный PIN-код
• Не храните биометрические данные
2. UX рекомендации:
• Четко объясняйте зачем нужна биометрия
• Предлагайте альтернативные методы входа
3. Обработка ошибок:
• Многочисленные неудачные попытки
• Изменение биометрических данных
Как вы реализуете биометрию? Делитесь кейсами в комментариях💬
🐸 Библиотека мобильного разработчика
#буст
Традиционные методы аутентификации уступают биометрии по:
• Удобству (не нужно запоминать пароли)
• Безопасности (уникальные биометрические данные)
• Скорости входа в приложение
1. Добавьте зависимость:
implementation 'androidx.biometric:biometric:1.1.0'
2. Проверка доступности:
val biometricManager = BiometricManager.from(context)
when (biometricManager.canAuthenticate()) {
BiometricManager.BIOMETRIC_SUCCESS -> // Доступно
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> // Нет сканера
BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> // Сканер занят
}
3. Запуск аутентификации:
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle("Вход в приложение")
.setSubtitle("Приложите палец к сканеру")
.setNegativeButtonText("Отмена")
.build()
val biometricPrompt = BiometricPrompt(activity, executor, object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
// Успешная аутентификация
}
})
biometricPrompt.authenticate(promptInfo)
1. Проверка доступности:
let context = LAContext()
var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
// Биометрия доступна
}
2. Запрос аутентификации:
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
localizedReason: "Для входа в приложение") { success, error in
DispatchQueue.main.async {
if success {
// Успешная аутентификация
}
}
}
1. Fallback механизмы:
• Предусмотрите резервный PIN-код
• Не храните биометрические данные
2. UX рекомендации:
• Четко объясняйте зачем нужна биометрия
• Предлагайте альтернативные методы входа
3. Обработка ошибок:
• Многочисленные неудачные попытки
• Изменение биометрических данных
Как вы реализуете биометрию? Делитесь кейсами в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2😁2
В карточках разберемся, что такое вайб-кодинг на самом деле, в чем его плюсы и минусы, и почему вокруг него сейчас столько разговоров.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4❤3👍1
Open SwiftUI Animations — библиотека готовых эффектов и анимаций для SwiftUI. Этот репозиторий вдохновит вас на добавление полезных и выразительных анимаций SwiftU в ваг проект.
В нем есть анимации загрузки/прогресса, циклические, анимации включения/выключения, входа/выхода, затухания, вращения и фоновые анимации, а кроме того потрясающие пружинные анимации.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🔥 Успей поднять квалификацию по выгодной цене!
Только до 17 августа у вас есть последняя возможность купить наши курсы по старым ценам.
🔹 Математика для Data Science:
— Базовый: (сейчас)
— Ультра:
— VIP:
🔹 Программирование на Python:
🔹 Алгоритмы и структуры данных:
🔹 Архитектуры и шаблоны проектирования:
🔹 AI-агенты для DS специалистов:
🔹 Основы IT для непрограммистов:
🔹 Базовые модели ML:
❗ Важно: Курсы из линейки Frontend Basic полностью снимаются с продажи. 17 августа — буквально последний день, когда их можно будет приобрести.
Успей купить до повышения — осталось 4 дня!
👉 Зафиксировать цену и начать учиться
Только до 17 августа у вас есть последняя возможность купить наши курсы по старым ценам.
🔹 Математика для Data Science:
— Базовый: (сейчас)
26 399₽
→ (будет) 33 900₽
— Ультра:
35 199₽
→ 44 900₽
— VIP:
59 829₽
→ 75 900₽
(выгода больше 16 000₽!)🔹 Программирование на Python:
24 990₽
→ 32 900₽
🔹 Алгоритмы и структуры данных:
31 669₽
→ 39 900₽
🔹 Архитектуры и шаблоны проектирования:
24 890₽
→ 32 900₽
🔹 AI-агенты для DS специалистов:
54 000₽
→ 59 000₽
🔹 Основы IT для непрограммистов:
14 994₽
→ 19 900₽
🔹 Базовые модели ML:
6 990₽
→ 9 900₽
❗ Важно: Курсы из линейки Frontend Basic полностью снимаются с продажи. 17 августа — буквально последний день, когда их можно будет приобрести.
Успей купить до повышения — осталось 4 дня!
👉 Зафиксировать цену и начать учиться
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍1
Собрали лучшее о мобильной разработке. Включаем и смотрим по пути на работу.
секреты производительности на iOS
HotSpot VM
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
На Хабре уже опубликовано немало статей о переходе на Swift Package Manager — как успешных, так и не очень. В случае автора миграция прошла удачно, однако на каждом этапе возникали проблемы, которые было сложно нагуглить или вообще найти решения.
Именно поэтому автор решил собрать все накопленные знания и поделиться ими в этой статье, чтобы помочь другим разработчикам сэкономить время.
👉 Читать статью
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3