TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #382 1.19K
🔢 Transferable в iOS: как научить ваши данные drag&drop и шерингу.

Задумывались ли вы, как разные приложения на вашем iPhone так легко обмениваются данными? Вы копируете текст из Safari и вставляете его в Notes, перетаскиваете файл из Finder в Telegram или скидываете фото через AirDrop. Эта магия кажется пользователю простой, но для разработчика за ней стоит сложная задача: как объяснить системе, что ваши кастомные данные тоже умеют «путешествовать»? В iOS 16 компания Apple представила ответ - протокол Transferable, ставший основой фреймворка Core Transferable. Это не просто еще один API, а декларативный мост, который навсегда меняет подход к реализации drag&drop, шеринга и других операций передачи данных.


Эволюция обмена данными:

До появления Transferable реализация перетаскивания или копирования кастомных объектов была квестом. Разработчику приходилось вручную работать с низкоуровневыми API вроде NSItemProvider, конвертировать свои модели в примитивные типы (String, Data, URL), писать кучу императивного кода для экспорта и импорта, а также обрабатывать множество состояний и ошибок.

Transferable переворачивает эту парадигму. Теперь вы декларируете возможности вашего типа прямо в его расширении, отвечая на вопрос системы: «Как я могу представить себя для передачи?». Система сама берет на себя всю тяжелую работу по управлению жизненным циклом передачи, взаимодействию с системными контроллерами и обработке ошибок.


TransferRepresentation: язык, на котором ваши данные говорят с системой:

Сердце протокола - свойство transferRepresentation. Это перечисление доступных представлений вашего типа для разных сценариев. Ключевая мощь в том, что вы можете предложить системе несколько вариантов одновременно, и она выберет оптимальный.

🔵CodableRepresentation: идеально для передачи структурированных данных между приложениями. Если ваш тип соответствует Codable, вы легко получаете сериализацию/десериализацию в JSON или Property List. Вы определяете кастомный UTType (как UTType.note), и система понимает, как с этим работать.

🔵FileRepresentation: для всего, что является или может быть представлено как файл. Вы указываете content type (например, .image, .pdf) и замыкания для экспорта (например, сохранение временного файла) и импорта (загрузка полученного файла). Система автоматически управляет файлами во временной директории.

🔵ProxyRepresentation: мост к уже существующим, системным типам. Если ваша модель содержит текст, ссылку или изображение, вы можете экспортировать это свойство. Это позволяет, например, перетащить объект Note в TextField, и вставится только его текстовое содержимое.


Один раз объявил - получил все:

После того как вы реализовали Transferable, ваша модель автоматически получает суперспособности во всех контекстах, где SwiftUI или система используют этот протокол:

🔵Drag & Drop в SwiftUI: модификатор .draggable(YourModel()) для перетаскивания и .dropDestination(for: YourModel.self) для приема работают из коробки.

🔵Кнопка «Поделиться» (ShareLink): в SwiftUI вы можете создать ShareLink("Поделиться", item: yourModelInstance). Система сама построит интерфейс шеринга со всеми доступными опциями (Messages, Mail, AirDrop и т.д.).

🔵Интеграция с системой: ваши данные автоматически начинают работать с NSItemProvider под капотом, что открывает совместимость с UIKit и даже другими платформами.


🔗 Ссылка на документацию Apple


💡 Вывод:

Core Transferable и протокол Transferable - это не просто техническое обновление, а смена парадигмы в разработке под экосистему Apple. Они переводят сложную, императивную и подверженную ошибкам логику передачи данных на уровень декларативных моделей.

Главная особенность в согласованности и надежности. Вы один раз описываете, как ваш тип данных может представлять себя миру и эта декларация начинает работать универсально: в вашем собственном UI, в системных диалогах шеринга, при перетаскивании между приложениями и даже между устройствами через Continuity.


➡️ Подписаться на канал
Мобильный трудоголик
  • 🔥 18
  • 👍 10
  • ❤ 1
  • 🙏 1
More from @hardworkerit
  1. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  2. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  3. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
  4. Sep 25, 2026🔢 Приватные свойства больше не ломают memberwise инициализатор в Swift 6.4 Swift автомати…
  5. Sep 24, 2026👨‍💻 Почему разработчики ненавидят своих менеджеров. Всем привет! Сегодня хочу разобрать…
  6. Sep 22, 2026🔢 Релиз Swift 6.4: главные изменения для разработчиков. Swift 6.4 вышел. Это обновление п…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →