
Новый протокол Transferable
пришел на замену классу NSItemProvider
в iOS 16+, macOS 13+ (Ventura и новее), watchOS 9.0+ и tvOS 16+. Познакомиться с некоторыми аспектами применения протокола Transferable можно в постах Протокол Transferable меняет правила игры для Drag & Drop в SwiftUI и Протокол Transferable в SwiftUI — передача альтернативного контента с помощью ProxyRepresentation.
Проблема в том, что при использовании нового протокола Transferable
и нового View
модификатора .dropDestination (for: action: isTargeted:);
его параметр for
не принимает несколько ТИПов "сбрасываемых" объектов одновременно, как это делает выше приведенный View
модификатор .onDrop (of: [.plainText, .url, .image] ...).
С помощью перечисления enum
DropItem
, куда мы включили все возможные объекты (текст String
, URL
-адрес, изображение в виде двоичного файла Data
), нам удалось в SwiftUI
с помощью нового протокола Transferable
обеспечить перетаскивание и "сброс" (Drag & Drop) в один и тот же контейнер (например,ZStack
) различных ТИПов объектов.