SwiftUI:没有在 DropDelegate 中删除 NSString 值
SwiftUI: Not getting dropped NSString value in DropDelegate
我正在尝试使用 NSString 实现简单的拖放操作。我可以使用 NSURL 但不能使用 NSString。每次我尝试拖放时,我总是以零值结束。这是我的代码:
struct ContentView: View
{
var body: some View
{
Text("Hello World")
.onDrag { NSItemProvider(object: "Hello World" as NSString) }
}
}
然后是掉落的物体:
struct DroppedView: View, DropDelegate
{
var body: some View
{
Text("Drop here")
.onDrop(of: ["public.text"], delegate: self)
}
func performDrop(info: DropInfo) -> Bool
{
if let items = info.itemProviders(for: ["public.text"]).first
{
item.loadItem(forTypeIdentifier: "public.text", options: nil)
{
(data, error) in
print(data)
}
}
return true
}
}
我本以为输出是“Hello World”。我错过了什么?
我不记得在哪里(在 Apple 文档的某个地方),但我偶尔会遇到我们不应该使用基本 UTType(如 public.text)来加载数据 - 而只是具体类型(如答案)必须使用。
NSString
将自己注册为 UTF-8 纯文本类型提供程序(它符合 public.text 但无法解码),因此工作变体是
func performDrop(info: DropInfo) -> Bool
{
if let item = info.itemProviders(for: ["public.utf8-plain-text"]).first
{
item.loadItem(forTypeIdentifier: "public.utf8-plain-text", options: nil)
{
(data, error) in
if let data = data as? Data {
print(NSString(data: data, encoding: 4) ?? "failed")
}
}
}
return true
}
测试 Xcode 13 / macOS 11.5.2
我正在尝试使用 NSString 实现简单的拖放操作。我可以使用 NSURL 但不能使用 NSString。每次我尝试拖放时,我总是以零值结束。这是我的代码:
struct ContentView: View
{
var body: some View
{
Text("Hello World")
.onDrag { NSItemProvider(object: "Hello World" as NSString) }
}
}
然后是掉落的物体:
struct DroppedView: View, DropDelegate
{
var body: some View
{
Text("Drop here")
.onDrop(of: ["public.text"], delegate: self)
}
func performDrop(info: DropInfo) -> Bool
{
if let items = info.itemProviders(for: ["public.text"]).first
{
item.loadItem(forTypeIdentifier: "public.text", options: nil)
{
(data, error) in
print(data)
}
}
return true
}
}
我本以为输出是“Hello World”。我错过了什么?
我不记得在哪里(在 Apple 文档的某个地方),但我偶尔会遇到我们不应该使用基本 UTType(如 public.text)来加载数据 - 而只是具体类型(如答案)必须使用。
NSString
将自己注册为 UTF-8 纯文本类型提供程序(它符合 public.text 但无法解码),因此工作变体是
func performDrop(info: DropInfo) -> Bool
{
if let item = info.itemProviders(for: ["public.utf8-plain-text"]).first
{
item.loadItem(forTypeIdentifier: "public.utf8-plain-text", options: nil)
{
(data, error) in
if let data = data as? Data {
print(NSString(data: data, encoding: 4) ?? "failed")
}
}
}
return true
}
测试 Xcode 13 / macOS 11.5.2