2

我正在尝试使用 NSString 实现简单的拖放操作。我可以使用 NSURL 但不能使用 NSString。每次我尝试拖放时,我总是得到一个 nil 值。这是我的代码:

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”。我错过了什么?

4

1 回答 1

5

可能这是一个错误,但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 测试

演示

于 2021-09-25T11:34:23.570 回答