Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥7👀3
В Swift система модификаторов доступа играет ключевую роль в разработке качественного программного обеспечения. Эти модификаторы позволяют контролировать видимость различных компонентов кода, обеспечивая необходимый уровень инкапсуляции и безопасности.
private:
Доступ только внутри текущей области видимости ( класса или структуры). Полная изоляция реализации.
fileprivate:
Доступ в пределах одного файла. Полезно для скрытия логики, используемой несколькими типами внутри одного файла.
internal:
Доступ во всём модуле. Виден везде, но не за его пределами. Данный доступ используется по умолчанию, если модификатор доступа не указывается в явном виде.
public:
Доступ из других модулей, но без возможности наследования или переопределения.
open:
Полная доступность, можно использовать наследование и переопределение даже в сторонних модулях.
При выборе модификатора доступа следует придерживаться принципа минимально необходимых привилегий. Начинать лучше с самых строгих ограничений (private), постепенно расширяя доступность по мере возникновения реальной необходимости.
Понимание различий между уровнями доступа критически важно для создания масштабируемых и поддерживаемых проектов.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤9✍2
На конференции ЦИПР Сергей Голицын (руководитель направления ИИ, Т1) обозначил ключевой тренд: промышленный ИИ, который становится неотъемлемой частью рабочих процессов. Прогноз: в ближайшие 3 года инвестиции в этот сектор могут превысить вложения в финтех.
👨⚕️ ИИ-ассистенты для специалистов:
Цифровые помощники для инженеров, юристов, врачей, которые автоматизируют рутинные задачи (анализ данных, поиск информации, составление отчетов).
📑 Автоматизация работы с документами:
Системы на базе ИИ для обработки договоров, технической документации, отчетности — от распознавания текста до извлечения смысла.
🔸 Инструменты MLOps / AutoML / LLMOps:
Платформы для ускоренного развертывания, управления и масштабирования машинного обучения (ML) и больших языковых моделей (LLM) с минимизацией ручного кода.
Комбинация генеративного ИИ (создание текстов, кода, изображений) с классическими ML-алгоритмами для точных прогнозов (например, предсказание поломок оборудования), оптимизации логистики и проектирования.
🔹 Более 50% промышленных компаний начнут активно использовать генеративный ИИ.
🔹 Мультимодальные ИИ-модели (одновременно анализирующие текст, звук, изображения и данные с датчиков) значительно улучшат точность прогнозирования.
🔹 Интеграция ИИ с VR/AR-технологиями повысит безопасность на опасных производствах (например, контроль действий сотрудников в реальном времени, обучение в симуляторах).
ИИ перестает быть «пилотным проектом» и становится стратегической инфраструктурой. Компании, которые не интегрируют его в ядро процессов, рискуют потерять конкурентоспособность.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21👀8🤔2🗿2
SF Symbols — это библиотека системных иконок, созданных Apple для всех платформ (iOS, macOS и др.). Они идеально сочетаются со шрифтом San Francisco, обеспечивая единый стиль интерфейса.
Ключевые особенности:
🔹 4000+ иконок в едином стиле.
🔹 Автоматическая адаптация под размер и вес текста.
🔹 Поддержка анимации и кастомизации (цвет, толщина линий).
🔹 Нативная интеграция с UIKit и SwiftUI.
Для использования необходимо скачать приложение на официальном сайте Apple. В приложении доступен поиск и просмотр иконок.
let myImageView = UIImageView(frame: .zero)
myImageView.image = UIImage(systemName: "wifi")
myImageView.tintColor = .blue
Image(systemName: "wifi")
.font(.system(size: 30, weight: .bold))
.foregroundColor(.blue)
SF Symbols — must-have для разработчиков под экосистему Apple. Экономит время и улучшает дизайн!
Есть только один минус: требует iOS 13 и выше.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22👍11🔥4
Глава компании Anthropic, Дарьо Амодеи, спрогнозировал, что в ближайшие 1-5 лет ИИ заменит около половины всех молодых специалистов. В фазу риска профессии в IT, юриспруденции, консалтинге, финансах, аналитике, документообороте и других сферах, где сейчас работают сотни тысяч.
Амодеи предупреждает, что власти и компании должны обратить внимание на проблему и начать подготовку к последствиям. Исходя из данных Anthropic, компании уже полномасштабно внедряют искусственный интеллект в рабочие процессы, которые уже полноценно могут выполнять десятки задач реальных специалистов. Работа ИИ обходится компаниям дешевле и быстрее, а также без выходных, отпусков и больничных.
Amazon, Microsoft, Walmart стремятся к оптимизации и автоматизации бизнес процесс уже сокращают тысячи рабочих рук.
Платформы вроде LinkedIn отмечают тревожную тенденцию: исчезают "начальные ступени" карьеры – позиции для младших разработчиков, юристов-стажеров, операторов поддержки. СЕО обсуждают заморозку найма в ожидании полной автоматизации. Резкий перелом прогнозируют уже
Решение, по мнению Амодеи, включают повышение прозрачности от ИИ-компаний, переподготовку кадров и даже введение "налога на токены" - отчислений с каждой использования ИИ в пользу общества.
Однако все согласны:
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👀25🗿10🤯7
Когда два потока блокируют друг друга, бесконечно ожидая освобождения ресурсов, которые каждый из них удерживает.
Поток 1: держит доступ к базе и ждёт сетевой ответ.
Поток 2: держит сеть и ждёт доступ к базе.
🔹 Устанавливайте строгий порядок блокировки ресурсов.
🔹 Используйте асинхронные вызовы вместо синхронных.
Ситуация, при которой два или более потока не могут выполнять полезной работы по причине борьбы за общий ресурс.
Два потока постоянно меняют флаг "готовности", но реальной работы не происходит.
🔹 Добавляйте случайные задержки между повторными попытками.
🔹 Используйте семафоры для контроля доступа.
🔹 Используйте барьеры.
Deadlock — полная остановка, Livelock — активность без прогресса.
🔸 GCD
🔸 OperationQueue
🔸 Новыми Actor-ами
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24✍11🔥4
Anonymous Quiz
11%
readonly
0%
var
19%
const
70%
let
👍24🔥12🫡5
В Swift типы данных делятся на именованные (собственные) и составные (временные).
Именованные типы:
Это типы, которые объявляются явно и получают своё имя. К ним относятся: структуры, классы, перечисления, протоколы.
struct MyStruct {
let name: String
}
class MyClass {
let value: Int
init(value: Int) {
self.value = value
}
}
Составные типы:
Это временные типы, которые компилятор создаёт автоматически. Они не имеют собственного имени и используются в момент вычислений. К ним относятся: функциональные типы и кортежи.
let coordinates: (x: Int, y: Int) = (10, 20)
let doPrint: (String) -> Void = { print($0) }
🔸 Именованные — когда нужна чёткая структура и повторное использование.
🔸 Составные — для временных данных или сокращения кода.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤11🔥5
Generics — это механизм, который позволяет писать универсальные функции и типы, работающие с любыми типами данных, сохраняя при этом полную типобезопасность.
🔹 Уменьшают дублирование кода:
Больше не нужно писать отдельные функции для Int, Float и других типов — один обобщённый вариант заменит их все.
🔹 Обеспечивают типобезопасность:
Компилятор проверяет типы на этапе компиляции, предотвращая ошибки в рантайме.
🔹 Повышают переиспользуемость:
Один алгоритм можно применять к разным типам данных без изменений.
Дженерики используют параметры типа (обычно обозначаются <T>, <Element> и т. д.), которые заменяются конкретными типами при компиляции.
func plusValue<T: Numeric>(first: T, second: T) -> T {
return first + second
}
let a = 5
let b = 10
print(plusValue(first: a, second: b)) // 15
let c = 0.5
let d = 3.0
print(plusValue(first: c, second: d)) // 3.0
//
struct Stack<Element> {
private var elements = [Element]()
mutating func push(_ element: Element) {
elements.append(element)
}
mutating func pop() -> Element? {
return elements.popLast()
}
}
var intStack = Stack<Int>()
intStack.push(1)
var stringStack = Stack<String>()
stringStack.push("Swift")
Иногда нужно указать, что тип T должен соответствовать определённым требованиям. Для этого используют протоколы:
func plusValue<T: Numeric>(first: T, second: T) -> T {
return first + second
}
Здесь T должен являться числом (Numeric), иначе код не скомпилируется.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤13🔥5
Главный навык разработчиков будущего - уметь писать не только код, чтобы добавить экран в приложение, но и понимать для чего добавляется та или иная кнопка. Т.е. быть ориентированным на продукт. О чем я кстати не раз уже упоминал в блоге. На таких разработчиков работодатели будут всегда охотнее смотреть, так как они мыслят намного шире своей первоначальной специализации, соответственно решение будет более выигрышно для бизнеса. Вот несколько советов, как развивать его разработчику:
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27❤13🔥7
Госдума приняла закон, обязывающий предустанавливать RuStore на ВСЕ продаваемые смартфоны и планшеты — включая технику Apple!
С 1 сентября (как раз к выходу iOS 26!) продавать iPhone и iPad можно будет только при условии, что на них можно устанавливать и обновлять приложения через RuStore.
Apple придется срочно решать: пойти на беспрецедентные уступки российским требованиям или рисковать штрафами.
Однако депутат Антон Горелкин объяснил, что никак запрещать продажи iPhone и iPad в случае неисполнения закона не планируется.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🗿24👀14🤯8
@EnvironmentObject в SwiftUI.@EnvironmentObject — это property wrapper, который позволяет передавать общие данные между несколькими View без явной передачи через инициализатор.
class UserSettings: ObservableObject {
@Published var isDarkMode = false
}
@main
struct MyApp: App {
var settings = UserSettings()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(settings) // Передаем объект в корневой вью
}
}
}
struct ProfileView: View {
@EnvironmentObject var settings: UserSettings // Автоматическая подписка на объек в сабвью
var body: some View {
Toggle("Темная тема", isOn: $settings.isDarkMode)
}
}
🔸 Автоматическое обновление: View перерисовывается при изменении
@Published свойств.🔸 Глобальный доступ: объект доступен в любой части иерархии View без цепочки
@Binding.🔸 Безопасность: если объект не передан в .environmentObject(), приложение крашнется — это помогает находить ошибки на раннем этапе.
🔹 Для глобальных настроек (тема, язык, авторизация и т.д.).
🔹 Когда нужно делиться данными между несвязанными View.
🔹 Вместо долгих цепочек
@Binding / @ObservedObject.Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍11✍6
Рекламные пуши добрались и до Wallet. Пользователи iOS сообщают о получении рекламных push-уведомлений от приложения Wallet. Уведомления предлагали скидку на билеты к фильму Apple TV+ «Формула-1».
Многие отмечают, что не давали явного согласия на получение такой рекламы, что потенциально противоречит собственным правилам Apple относительно маркетинговых коммуникаций.
Интересно, что в свежей бета-версии iOS 26 уже обнаружилась настройка для отключения этих самых «Рекламных предложений» в Wallet.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🗿22🤯12🔥5👀2
Frame — это прямоугольник, который определяет положение и размер вью относительно её родителя. Он отвечает на вопрос: "Где и какого размера этот элемент находится в родительском контейнере?"
Bounds — это прямоугольник, который описывает внутреннюю систему координат вью. Он отвечает на вопрос: "Какое пространство доступно для отрисовки внутри этого элемента?"
Система координат
🔸 Frame использует систему координат родительского вью.
🔸 Bounds использует собственную систему координат.
Влияние трансформации
🔸 Frame меняется при применении трансформаций (например, при повороте вью он может измениться неопределенным образом).
🔸 Bounds остаётся неизменным при любых трансформациях.
Когда используется
🔸 Frame — когда нужно расположить вью относительно родителя.
🔸 Bounds — когда работаете с внутренним содержимым вью (например, обрезка изображения).
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤17🤝7
В iOS-разработке мы часто используем готовые библиотеки или упаковываем свой код для повторного использования. Тут есть два принципиально разных подхода: статические и динамические библиотеки.
🔹 Статические библиотеки (*.a) встраивают весь свой код прямо в бинарник приложения во время компиляции. С одной стороны, это удобно — после сборки приложение не зависит от внешних файлов. С другой — любое изменение в библиотеке потребует полной перекомпиляции проекта.
🔹 Динамические библиотеки (.dylib) работают иначе. Вместо включения в исполняемый файл они подгружаются в момент запуска приложения. Это уменьшает размер основного бинарника и ускоряет запуск (если библиотек немного). Но есть нюанс — если динамических зависимостей слишком много, время старта, наоборот, увеличится.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤12✍5
Новый инструмент Xtool позволяет собирать, подписывать и запускать iOS приложения без Xcode. Как отмечает Томас Рикуар, теперь разрабатывать под iOS можно даже на Linux или Windows — достаточно минимального Swift пакета.
🔸 Открытый билдчейн с полным контролем над процессом сборки.
🔸 Поддержка кроссплатформенной разработки (macOS / Linux / Windows).
🔸 Работает с чистыми Swift пакетами — без Storyboard и xcodeproj.
🔹 Больше не нужен Xcode для базовых задач.
🔹 Сборка на любом ПК — даже без Mac (если есть сертификаты подписи).
🔹 Гибкость CI/CD — можно использовать Linux серверы для сборки iOS приложений.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥10🤯4
@ObservedObject в SwiftUI.@ObservedObject — это property wrapper, который позволяет подписываться на изменения внешнего объекта данных и автоматически обновлять View при их изменении.
class Counter: ObservableObject {
@Published var value = 0
}
struct CounterView: View {
@ObservedObject var counter: Counter
var body: some View {
Button("+1") { counter.value += 1 }
Text("Значение: \(counter.value)")
}
}
struct ParentView: View {
@StateObject private var counter = Counter()
var body: some View {
CounterView(counter: counter)
}
}
🔸 Автоматическое обновление: View перерисовывается при изменении
@Published свойств.🔸 Локальная область видимости: работает только для конкретного View, куда передан объект.
🔸 Гибкость: можно передавать между View как обычное свойство.
@EnvironmentObject.Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍13❤3
Apple добавила в App Store новый раздел с настройками доступности, где разработчики могут отметить, какие функции поддерживает их приложение. Это помогает пользователям с особыми потребностями быстрее находить подходящие программы.
🔹 Скринридер (VoiceOver) — поддержка озвучивания интерфейса.
🔹 Управление голосом (Voice Control).
🔹 Увеличение текста (Dynamic Type).
🔹 Темная тема (Dark Mode).
🔹 Различие не только цветом (не полагается только на цвет для передачи информации).
🔹 Повышенный контраст (для слабовидящих).
🔹 Уменьшение движения (Reduce Motion).
🔹 Субтитры (скрытые титры для видео).
🔹 Аудиоописание (описание визуального контента).
Разработчик самостоятельно отмечает в App Store Connect, какие функции доступности реализованы в приложении. Apple не проверяет это автоматически — ответственность лежит на команде.
🔸 Пользователи смогут фильтровать приложения по нужным им функциям.
🔸 Разработчики получат дополнительный способ выделить своё приложение.
🔸 Повышение инклюзивности — больше людей смогут комфортно пользоваться приложением.
→ App Store Connect → [Ваше приложение] → Доступность
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24👀14🔥3
Ты часто слышишь: «Нам нужны командные игроки». Но что это на самом деле значит?
Это не про бесконечные митинги и формальные отчёты. И уж точно не про работу в одиночку, под эгидой одной компании.
🔹 Готовность делиться — не только проблемами, но и идеями, знаниями, ресурсами.
🔹 Взаимное уважение — к коллегам, их времени и вкладу в общее дело.
🔹 Поддержка вместо конкуренции — ты не просто «закрываешь свои таски», а помогаешь другим двигаться вперёд.
🔹 Общий результат важнее личных амбиций — успех проекта зависит от всех, а не только от тебя.
«Но у меня мало опыта в больших командах!» — не проблема.
Важно не количество людей вокруг, а твой подход к совместной работе.
🔸 На вопросы наподобие «Расскажите о вашей прошлой работе» нужно подробно рассказать о составе прошлой команды, с кем тебе приходилось взаимодействовать.
🔸 На вопросы вроде «Расскажите какие задачи приходилось решать?» нужно обязательно отвечать о совместных с командой достижениях и решенных проблемах и в меньшей степени о единоличных успехах.
🔸 На вопросы «Как ты делал работу команды эффективнее?» желательно отвечать что-то вроде: «Я инициировал ежедневные созвоны, чтобы быстро решать вопросы, предлагал упрощённые решения, которые экономили время всем, и всегда был на связи, если кому-то нужна была помощь».
🔸 Вопрос «Какой был результат вашей работы?» предполагает ответ вроде: «Мы уложились в дедлайн, избежали лишних доработок, и бизнес заказчик остался доволен итогом работы».
Если у тебя есть опыт наставничества с джунами, мидлами и другими сотрудниками — не скрывай этого!
🔹 Ты не только специалист, но и наставник — можешь развивать команду.
🔹 Ты мыслишь масштабнее — понимаешь, что рост коллег = рост компании.
🔹 Ты умеешь объяснять — а это редкий и ценный навык.
Умение работать с людьми — вот что делает тебя по-настоящему ценным. Настали временна, когда код пишут многие, нужно выделяться и качать софт-скиллы.
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥14❤2👀1
Комьюнити Swift официально запускает Android Workgroup — рабочую группу, которая займётся адаптацией языка под разработку для Android.
🔹 Swift может стать официально поддерживаемым языком для Android.
🔹 Появится возможность писать нативные приложения на Swift под Android (как это уже делает Apple Music).
🔹 Открытая разработка: любой может присоединиться к обсуждениям и вносить правки.
🔸 Поддержка Android в дистрибутиве Swift.
🔸 Адаптация Swift пакетов под Android идиомы.
🔸 Интеграция с Java SDK (взаимодействие Swift и Java кода).
🔸 Система CI/CD для тестирования сборки под Android.
🔸 Отладка Swift кода на Android устройствах.
Сообщество может влиять на процесс через форумы Swift. Членство в группе открыто для всех.
Если инициатива реализуется, разработчики смогут:
🔹 Использовать один язык (Swift) для iOS и Android.
🔹 Переносить код между платформами с минимальными изменениями.
🔹 Упростить поддержку кроссплатформенных проектов.
Пока рано говорить о сроках, но сам факт создания рабочей группы — большой шаг в сторону универсального Swift.
Будем следить за развитием!
Мобильный трудоголик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29👍10👀4