在不实现NSItemProviderWriting的情况下使用.onDrag,可以通过以下步骤实现:
下面是一个示例代码,演示如何在不实现NSItemProviderWriting的情况下使用.onDrag:
struct ContentView: View {
@State private var draggedItem: CustomData? = nil
var body: some View {
VStack {
Text("Drag me")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(10)
.onDrag {
self.draggedItem = CustomData(name: "Custom Data")
let provider = NSItemProvider(object: self.draggedItem!)
provider.registerDataRepresentation(forTypeIdentifier: "com.example.customdata", visibility: .all) { completion in
completion(self.draggedItem, nil)
return nil
}
return provider
}
if let item = draggedItem {
Text("Dragged item: \(item.name)")
.padding()
.background(Color.green)
.foregroundColor(.white)
.cornerRadius(10)
}
}
}
}
struct CustomData: Identifiable, Hashable {
let id = UUID()
let name: String
}
在这个示例中,我们创建了一个自定义的数据类型CustomData,表示拖拽的数据。然后,在.onDrag修饰符中,我们注册了这个自定义数据类型,并指定了标识符"com.example.customdata"。当用户拖拽视图时,会创建一个NSItemProvider对象,并在注册的数据类型中提供拖拽的数据。在加载处理程序中,我们将加载后的数据赋值给draggedItem属性,并在视图中显示。
请注意,这只是一个简单的示例,你可以根据实际需求进行修改和扩展。另外,腾讯云相关产品和产品介绍链接地址请参考腾讯云官方文档。
云+社区沙龙online [技术应变力]
云+社区技术沙龙[第17期]
腾讯云数据湖专题直播
云+社区技术沙龙[第14期]
云原生正发声
企业创新在线学堂
Hello Serverless 来了
领取专属 10元无门槛券
手把手带您无忧上云