嘗試實作文本檔案的簡單拖放:
struct ContentView: View {
@State private var drag = false
var body: some View {
Text("Hello, world!")
.frame(width: 300, height: 300)
.onDrop(of: [.url], isTargeted: $drag) { (providers, location) in
print("Can load", providers.first?.canLoadObject(ofClass: NSURL.self) == true) // Always false
providers.first?.loadItem(forTypeIdentifier: UTType.url.identifier, options: nil, completionHandler: { secureCoding, error in
if let error = error {
print(error) // Cannot load representation of type ...
}
if let item = secureCoding as? Data { // Always nil
print("got data")
}
})
return true
}
}
}
嘗試使用已洗掉檔案的 UTType (public.url,public.data) 和loadItem(forTypeIdentifier). 我試過的都沒有用。發現了類似的問題,但它們不起作用,答案看起來已經過時了。
我有舊的 Cocoa 代碼,registerForDraggedTypes如果可行的話,這看起來要簡單得多。
uj5u.com熱心網友回復:
剛剛使用純 .txt 檔案進行了修改和測驗。Xcode 13.3 / macOS 12.3.1
@State private var text = "Drop Here"
var body: some View {
Text(text)
.frame(width: 200, height: 200).border(.red)
.onDrop(of: ["public.file-url"], isTargeted: $dragOver) { providers -> Bool in
providers.first?.loadDataRepresentation(forTypeIdentifier: "public.file-url", completionHandler: { (data, error) in
if let data = data, let path = NSString(data: data, encoding: 4), let url = URL(string: path as String) {
if let value = try? String(contentsOf: url, encoding: .utf8) {
DispatchQueue.main.async {
self.text = value
}
}
}
})
return true
}
*注意:我不記得確切的位置,但我在 Apple 的檔案中遇到過,我們必須將具體的 UTTypes 用于特定用例而不是通用的,即。fileURL 確實是 URL,但為了匹配它必須準確指定!
uj5u.com熱心網友回復:
我想發布我自己的答案,只是為了指出陷阱。感謝@Asperi,我得到了一個作業樣本。
.onDrop(of: [.fileURL],需要是UTType.fileURL(或public.file-url),不是UTType.url。- 我正在使用
providers.first?.loadItem(forTypeIdentifier:...,需要loadDataRepresentation(forTypeIdentifier:... - 讀取資料:
使用let path = String(data: data, encoding: .utf8)作品。下一步很重要,我需要使用URL(string:). 不URL(fileURLWithPath:)
使用URL(fileURLWithPath:)會產生看起來像具有安全范圍的 URL 的東西。
其他小注意事項:
使用let path = String(data: data, encoding: .utf8)作品,不需要NNString.
使用UTType.fileURL(and UTType.fileURL.identifierfor String) 也可以,不需要硬編碼"public.file-url"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/480251.html
上一篇:SoX批量轉換添加白噪聲
