如何在Xcode中拖放枚举,Swift



我有一个简单的enum作为两个UICollectionView:的数据结构

enum ToolBarItem {
case inking(PKInkingTool.InkType, UIColor, CGFloat)
case lasso
case eraser(PKEraserTool.EraserType)
}

两种UICollectionView模型都只是:

private(set) var tools = [ToolBarItem]()

我希望能够在两个UICollectionView内和之间拖放项目,因此我需要以某种方式将其转换为dragItem。


我读过关于在类中嵌入enum并实现NSItemProviderWritingNSItemProviderReadingCodable以创建项提供程序的内容。但这非常混乱,我希望有更好的解决方案,因为它只是一个enum

我很乐意接受任何帮助或建议。

由于还没有答案,我想为有同样问题的人分享我目前的解决方案:

我创建了一个名为dummyToolItem的类,它符合NSItemProviderWritingNSItemProviderReading。但是,这些实现是不起作用的,它们不需要起作用,因为它们永远不会被使用。

我现在这样创建我的UIDragItem

let toolData = toolBarItems.tools[indexPath.item] // this is the ToolBarItem
let dragItem = UIDragItem(itemProvider: NSItemProvider(object: dummyToolItem()))
dragItem.localObject = toolData
return [dragItem]

由于只有我的本地UICollectionView会接受此数据并使用localObject,因此伪实现并不重要,仍然可以用于识别类型是ToolBarItem

我想有更好的方法可以做到这一点,但这个解决方案是有效的。

最新更新