Как стать автором
Обновить

Комментарии 1

Да, это фантастический протокол Transferable. Тоже работаю над статьей о Transferable. для своего блога. Но чтобы это оценить, надо понимать, что было до появления этого протокола, то есть до iOS 16+.

За операции Drag & Drop (перетаскивание и "сброс") отвечал класс class NSItemProvider. Именно этот класс делает очень сложные вещи, связанные с передачей данных между процессами. Он также решает проблемы с безопасностью и определенно там есть многопоточность, потому что мы не хотим блокировать UI двух приложений в случае передачи между ними больших по объему  изображений.

К сожалению, класс NSItemProvider — это до-Swift класс, и мы должны использовать “as” как  “мостик” между такими Swift ТИПами как String, и такими ТИПами старого NS Мира, как NSString, это Objective-C вещи, и “as” является “мостом” в этот старый мир. До появления протокола Transferable технология Drag & Drop (перетаскивание и сброс) была одним из таких мест соприкосновения "старого" и нового Миров.

Почти параллельно с вашей статьей появились две статьи об опыте использования протокол Transferable :

First Experience With Transferable Implementing Drag And Drop In SwiftUI

Transferable Protocol in SwiftUI – Transferring Alternative Content With ProxyRepresentation

Единственное, до чего не "дотягивает" протокол Transferable и соответствующий ему View модификатор dropDestination(for:action:isTargeted:), это возможность указания нескольких UTType.

Раньше, до iOS 16+:

Теперь, начиная с iOS 16+:

Но выход есть:

Используем перечисление enum
Используем перечисление enum

Зарегистрируйтесь на Хабре, чтобы оставить комментарий