This media is not supported in your browser
VIEW IN TELEGRAM
Переворачиваем вечный SwiftUI календарь при помощи UIKit
Специально для вас сделал демо проект с которым можно переворачивать календарь прямо на своем телефоне
👉 70 строк кода
👉 UIPageViewController
👉 Всего 2 инстанса и полный реюз 3 сентября
#swift #swiftUI #UIKit #humor
Специально для вас сделал демо проект с которым можно переворачивать календарь прямо на своем телефоне
👉 70 строк кода
👉 UIPageViewController
👉 Всего 2 инстанса и полный реюз 3 сентября
#swift #swiftUI #UIKit #humor
👍31👎10
Потокобезопасность swift через - lock
Многие считают что Swift Concurrency это наше все и чтобы достичь потокобезопасности нужно использовать акторы. Это правильный ход мышления, но не всегда применимый. Для кейсов где Structured concurrency не подходит Apple добавили в iOS 16 OSAllocatedUnfairLock.
В приведенной статье автор приводить пример использования OSAllocatedUnfairLock и NSRecursiveLock в разрезе классической задачи хранилища в UDF
#swift #concurrency
Многие считают что Swift Concurrency это наше все и чтобы достичь потокобезопасности нужно использовать акторы. Это правильный ход мышления, но не всегда применимый. Для кейсов где Structured concurrency не подходит Apple добавили в iOS 16 OSAllocatedUnfairLock.
В приведенной статье автор приводить пример использования OSAllocatedUnfairLock и NSRecursiveLock в разрезе классической задачи хранилища в UDF
#swift #concurrency
👍7👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Теперь можно использовать if в качестве выражения, например для динамического задания значения константы
#swift #evolution
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16👎1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👎1
В этом году многие планируют поднять таргет до iOS 16 а это значит что можно мигрировать на нативный фреймворк Swift Charts.
Главное и безоговорочное преимущество - отсутствие сторонней зависимости, что позволяет уменьшить размер приложения.
Даже если ваш таргет iOS 15, уже можно планировать работу по миграции на нативные графики и включать их для пользователей на актуальных iOS, чтобы иметь обратную связь и возможность переключаться на старые графики по-небходимости
#swift #charts #migration
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎1
Внезапный инсайт с WWDC23, Apple доработала Swift-DocC так, что это теперь полноценный code-first редактор сайтов для инженеров, гораздо удобнее папок с .md файлами
Вот теперь думаю, переводить всю документацию на новые релльсы или начать с новой
#Swift #DocC #wwdc23
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👎1
package
в Swift 5.9В нововой версии Swift 5.9, которая идет с Xcode 15 появился новый модификотор доступа -
package
.Этот модификатор будет полезен для выстраивания корректных доступов в подключаемых модулях, для случая когда вы не хотите, чтобы доступ к определенной функции осуществлялся из другого модуля, а только внутри того же модуля. В целом, этот модификатор доступа похож на
internal
, за исключением того, что он создан для модулей.Актуальное ранжирование модификаторов доступа:
🔘 private
🔘 fileprivate
🔘 internal
🔘 package ✔️
🔘 public
🔘 open
#swift #proposal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎1
В своем посте на хабре "Насколько Swift удобен для DSL?", я вскользь упоминал про свои снипеты assignOnWeak и методе weakify. В представленной либе, автор пошел дальше и сделал простую библиотеку для всех возможных случаев с Readme и примерами
publisher
.sink(weak(ThisClass.handle))
.store(in: &cancellables)
var userNameBinding: Binding<String> = .init(
set: unowned(\.userName),
get: unowned(\.userName)
)
networkManager.performTask(weak(
capture: (userId, chatId), ThisClass.process)
)
#weak #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Переворачиваем вечный SwiftUI календарь при помощи UIKit
У этого канала своя традиция на 3 сентября😅. Специально для вас сделал демо проект с которым можно переворачивать календарь прямо на своем телефоне
👉 70 строк кода
👉 UIPageViewController
👉 Всего 2 инстанса и полный реюз 3 сентября
#swift #swiftUI #UIKit #humor
У этого канала своя традиция на 3 сентября😅. Специально для вас сделал демо проект с которым можно переворачивать календарь прямо на своем телефоне
👉 70 строк кода
👉 UIPageViewController
👉 Всего 2 инстанса и полный реюз 3 сентября
#swift #swiftUI #UIKit #humor
Хабр
Переворачиваем вечный SwiftUI календарь при помощи UIKit
Данная статья написана в развлекательных целях. Если вам интересно следить за самыми последними новостями iOS разработки и получать подборку интересных статей по этой тематике, тогда вам стоит...
👍6
Наткнулся на годный глоссарий по Swift Concurrency. Cодержит термины, ключевые слова и аннотации, связанные с параллелизмом. Содержит тип (ключевое слово, протокол, flow control), описание, ссылку на пропоузал и пример использования. Когда это может быть полезно? Пройтись и проверить что вы знакомы со всем что нужно, объяснить коллеге понятными словами, разобраться в MR, подготовиться к собесу.
Точно достойно
#swift #concurrency #glossary
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Каждый раз, когда я вижу в MR очередную реализацию "более эффективной" коллекции, хочется бить по рукам. Даже если есть практическая необходимость, уже есть официальный пакет с открытым исходным кодом для расширения набора коллекций Swift. Цель проекта - служить испытательным полигоном для новых структур данных, улучшить дизайн и исправить ошибки до официального включения в библиотеку. Например, есть реализации для двусторонней очереди (
Deque
), упорядоченного набора (OrderedSet
), упорядоченного словаря (OrderedDictionary
), BitSet
, BitArray
, Heap
, TreeSet
и TreeDictionary
. Особенности коллекций:
Deque:
• Упорядоченная коллекция с произвольным доступом и изменяемостью
• Поддерживает эффективные вставки и удаления с обоих концов
• Обеспечивает удобные операции по вставке и выталкиванию элементов
OrderedSet:
• Гибрид массива и набора
• Поддерживает уникальные элементы и эффективные тесты на принадлежность
• Использует массив для хранения элементов и хэш-таблицу для индексов
OrderedDictionary:
• Альтернатива словарю для эффективного доступа к элементам в различных позициях
• Вставляет новые пары ключ-значение за постоянное время
• Обеспечивает произвольный доступ к парам ключ-значение
#swift #collections
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Swift предоставляет множество встроенных форматтеров, один из которых форматтер списков ListFormatter (iOS 13+). Он помогает объединять списки элементов в удобочитаемые предложения:
#swift #list #formatter #listformatter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
Продолжаю разбирать пропоузалы Swift. В этом предложении вводится новый атрибут
@specialized
, который позволяет в дженерик функции генерировать предварительно специализированные версии этой функции для определенных типов. Эта специализация создает пользовательскую реализацию функции, где "дженерики" заменяются определенными типами. Это позволяет оптимизировать функции, под конкретные типы: когда неспециализированная версия функции вызывается с одним из этих типов, компилятор генерирует код, который будет повторно отправлен в эти предварительно специализированные версии, если таковые имеются. Врядли это пригодится где-то кроме Foundation и специализированных фреймворков, но идея интересная.#swift #evolution
Please open Telegram to view this post
VIEW IN TELEGRAM
Группы задач существовали всегда, в GCD, OperationQueue и Combine. Они есть и в Swift Concurrency. Группы задач позволяют динамически запускать несколько дочерних задач и ожидать их выполнения или отмены. Группы задач используют совместную отмену и требуют проверки свойства Task.isCancelled (привет OperaionQueue). В статье на примерах рассматривается использование групп задач и оптимизация при работе с ними:
#swift #concurrency #group
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Ollama
Mattt продолжает вести блог NSHipster и я с удовольствием погружаюсь в старый добрый стиль и простоту статей. В этот раз тема актуальная - локальные LLM, на примере Ollama:
🟡 Позволяет запускать большие языковые модели на Mac.
🟡 Работает на основе llama.cpp, предоставляя удобное управление моделями.
🟡 Использует файлы моделей для настройки поведения моделей.
📁 Преимущества локального запуска моделей:
🔘 Конфиденциальность: данные не покидают устройство.
🔘 Стоимость: работа 24/7 без учета времени использования.
🔘 Задержка: отсутствие сетевых обращений, быстрое реагирование.
🔘 Контроль: отсутствие черного ящика и цензуры.
🔘 Надежность: отсутствие отключений и ограничений по квоте API.
🐥 Создание Swift приложений с помощью Ollama:
🟣 Ollama предоставляет HTTP API для интеграции с другими инструментами.
🟣 Мэт создал свой пакет Ollama Swift
🟣 Этот пакет в первую очередь для того чтобы делать утилиты для себя
🟣 Примеры реализации RAG-систем. Если для вас это новое сочетание букв-обязательно почитайте. Это способ использовать свою базу знаний при работе с LLM
#swift #llm #ollama
Mattt продолжает вести блог NSHipster и я с удовольствием погружаюсь в старый добрый стиль и простоту статей. В этот раз тема актуальная - локальные LLM, на примере Ollama:
#swift #llm #ollama
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2⚡2
Дизайн система? Нет, цветовая система! Очень интересный пример использования системы типов для работы с цветами:
Проблемы UIColor:
Новый подход с фантомными типами:
У автора большие ожидания от идеи системы типов в Swift, я же надеюсь что это не уйдет дальше идеи и мы останемся с текущей концепцией семантических цветов -
accentColor, primary, secondary
. Но сама по себе идея использования системы типов для реализации безопасного использования имеет шанс на жизнь#swift #color #system
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4❤3
Продолжаем разбираться с "упрощениями" в Swift. В этот раз, нас спасают от небезопасной работы с контейнерами и расширяют возможности использования новых типов
Span
и RawSpan
в существующих контейнерах.Мотивация
Многие типы контейнеров из стандартной библиотеки могут предоставлять прямой доступ к своему внутреннему представлению. До сих пор это можно было сделать только небезопасным способом. Стандартная библиотека предоставляет эту небезопасную функциональность с помощью функций, принимающих замыкания, таких как
withUnsafeBufferPointer()
, withContiguousStorageIfAvailable()
и withUnsafeBytes()
. У этих функций есть несколько недостатков, самый заметный из которых — использование небезопасных типов, что делает их неприемлемыми в средах с повышенными требованиями к безопасности. API, принимающие замыкания, также могут быть сложны в сочетании с новыми функциями и друг с другом. Эти проблемы решаются с помощью Span. Согласно этому предложению, совместимые типы стандартной библиотеки будут предоставлять доступ к своему внутреннему представлению через вычисляемые свойства типа Span
и RawSpan
.#swift #evolution #proposals
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS Broadcast
А вот и статья про то как работать с unsafe в Swift сейчас и в каких случаях это может вам понадобиться:
Когда использовать небезопасные указатели?
Рекомендации по использованию небезопасных указателей:
Выводы
#unsafe #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
Новый протокол
~Copyable
появился в Swift 5.9. Мы уже разбирали Copyable, а вот и один из примеров поользы использование: на примере разбирается, когда вы стоит использовать ~Copyable
. Протокол ~Copyable
делает объект "не подлежащим копированию". По умолчанию Swift автоматически добавляет этот протокол для всех типов. #swift #copyable
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kotlin Multiplatform Broadcast
Kotlin-to-Swift экспорт позволяет удобно использовать скомпилированный для Apple таргетов код из Swift удобным образом. Изменение добавили в Kotlin 2.2.0-Beta2
Ключевые фичи:
👉 Поддержка многомодульности: каждый Kotlin модуль - отдельный Swift модуль
👉 Поддержка пакетов в коде
👉 type alias теперь доступны из Swift
👉 Улучшения в nullability с примитивными типами
👉 Вызов перегруженных функций в Kotlin из Swift кода
👉 Можно изменить имя модуля
Фича всё ещё в экспериментально режиме и для её включения надо выполнить ряд действий (подобно как раньше в XCode проект подключался KMP модуль)
#kotlin #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1