macos - SwiftUI:如何在 macOS 上从 Mail 中拖放电子邮件
问题描述
作为@Asperi 对我关于如何拖放联系人的问题的回答的后续,我还希望能够以相同的方式拖放电子邮件。这是我的代码:
import SwiftUI
import UniformTypeIdentifiers
let uttypes = [String(kUTTypeEmailMessage)]
struct ContentView: View
{
let dropDelegate = EmailDropDelegate()
var body: some View
{
VStack
{
Text("Drag your email here!")
.padding(20)
}
.onDrop(of: uttypes, delegate: dropDelegate)
}
}
struct EmailDropDelegate: DropDelegate
{
func validateDrop(info: DropInfo) -> Bool
{
return true
}
func dropEntered(info: DropInfo)
{
print ("Drop Entered")
}
func performDrop(info: DropInfo) -> Bool
{
let items = info.itemProviders(for: uttypes)
for item in items
{
print (item.registeredTypeIdentifiers) // prints []
item.loadDataRepresentation(forTypeIdentifier: kUTTypeEmailMessage as String, completionHandler: { (data, error) in
if let data = data
{
print(data)
}
})
}
return true
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我没有得到任何可以解码的数据。
2020-11-08 09:34:54.877532+0000 DropContact[3856:124769] 找不到符合 public.email-message 类型的表示
这个功能一直让我望而却步,因此非常感谢任何帮助。
解决方案
嗯......方法是一样的,唯一的事情是Apple Mail不提供kUTTypeEmailMessage
拖拽(复制)的UTI表示
如果我们为通用kUTTypeContent
UTI 注册 self 并调查来自 Mail 的投递邮件的粘贴板内容,我们会得到:
即,这是一个完整的表示列表:
com.apple.mail.PasteboardTypeMessageTransfer,
com.apple.mail.PasteboardTypeAutomator,
com.apple.pasteboard.promised-file-url,
dyn.ah62d4rv4gu8y6y4usm1044pxqzb085xyqz1hk64uqm10c6xenv61a3k,
NSPromiseContentsPboardType,
com.apple.pasteboard.promised-file-content-type,
dyn.ah62d4rv4gu8yc6durvwwa3xmrvw1gkdusm1044pxqyuha2pxsvw0e55bsmwca7d3sbwu,
Apple files promise pasteboard type,
public.url,
CorePasteboardFlavorType 0x75726C20,
dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu,
Apple URL pasteboard type,
public.url-name,
CorePasteboardFlavorType 0x75726C6E,
public.utf8-plain-text,
NSStringPboardType
所以现在你可以从上面加载任何这些类型的数据(当然苹果自己的私人数据除外)。而且,顺便说一句,该列表可能(并且更确切地说)取决于 macOS 版本。
推荐阅读
- autodesk-forge - 如何将 Autodesk 设置设置为前面?
- python - 在服务器上安全地执行不受信任的 python 代码
- angular7 - 从倒计时函数中触发模态
- android-studio - org.gradle.execution.MultipleBuildFailures:构建完成,在 Android Studio 中有 1 次失败
- jquery - 如何使用 jquery 验证器规则为动态添加的元素添加错误放置?
- hibernate - Spring Boot + JPA 中的 SolidDB
- javascript - 如何使用 Gatsby.js 在 Markdown 中实现 gatsby-remark-images-grid
- javascript - 二维数组[对象,对象]
- node.js - Laravel Mix HMR 编译后不更新
- after-effects - 在 After Effects 中堆叠和平衡形状?