In my code the drag&drop function works fine with URL objects. But the exact same code for String objects does not. I have tried with countless casts and loadItem instead of loadObject ... no luck so far.
Can anyone help me here? It would be very much appreciated.
code for URL objects – Working
.onDrag {
    return NSItemProvider(object: item.url as NSURL) 
}
.onDrop(of: [UTType.url], isTargeted: $isDropping) { providers in
    _ = providers.first?.loadObject(ofClass: URL.self) { url, error in
        if let error = error { print(error.localizedDescription) }
        if let url = url {
            DispatchQueue.main.async {
                self.array2.insert(Item(title: "new", url: url), at: 0)
            }
        }
    }
    return true
}
the same with String does not:
.onDrag {
    return NSItemProvider(object: item.title as NSString) 
}
.onDrop(of: [UTType.text], isTargeted: $isDropping) { providers in
    _ = providers.first?.loadObject(ofClass: String.self) { string, error in
        if let error = error { print(error.localizedDescription) }
        if let string = string {
            DispatchQueue.main.async {
                self.array2.insert(Item(title: string, url: URL(string: "http://www.apple.com")!), at: 0)
            }
        }
    }
    return true
}
full MRE code:
import SwiftUI
import UniformTypeIdentifiers
struct Item: Identifiable {
    let id = UUID()
    var title: String
    var url: URL
}
struct ContentView: View {
    
    @State var array1: [Item] = [
        Item(title: "One", url: URL(string: "http://www.amazon.com")!),
        Item(title: "Two", url: URL(string: "http://www.apple.com")!),
        Item(title: "Three", url: URL(string: "http://www.example.com")!),
    ]
    @State var array2: [Item] = []
    @State var isDropping = false
    
    var body: some View {
        
        HStack(alignment: .top) {
            
            VStack(alignment: .leading) {
                ForEach(array1) { item in
                    Text(item.title)
                    Text(item.url.absoluteString).foregroundColor(.secondary)
                    
                        // DRAG
                        .onDrag {
                            return NSItemProvider(object: item.url as NSURL) // WORKS
                         // return NSItemProvider(object: item.title as NSString) // DOES NOT WORK
                        }
                }
            }
            .frame(maxWidth: .infinity)
            
            Divider()
            
            VStack(alignment: .leading) {
                ForEach(array2) { item in
                    Text(item.title)
                    Text(item.url.absoluteString).foregroundColor(.secondary)
                    
                }
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(isDropping ? .green : .gray)
            
            
            // DROP with url/NSURL -- WORKS
            .onDrop(of: [UTType.url], isTargeted: $isDropping) { providers in
                
                _ = providers.first?.loadObject(ofClass: URL.self) { url, error in
                    if let error = error { print(error.localizedDescription) }
                    if let url = url {
                        DispatchQueue.main.async {
                            self.array2.insert(Item(title: "new", url: url), at: 0)
                        }
                    }
                }
                return true
            }
            // DROP with text/NSString -- DOES NOT WORK
            .onDrop(of: [UTType.text], isTargeted: $isDropping) { providers in
                
                _ = providers.first?.loadObject(ofClass: String.self) { string, error in
                    if let error = error { print(error.localizedDescription) }
                    if let string = string {
                        DispatchQueue.main.async {
                            self.array2.insert(Item(title: string, url: URL(string: "http://www.apple.com")!), at: 0)
                        }
                    }
                }
                return true
            }
        }
    }
}