我的共享扩展应该以相同的方式处理图像,视频,文件,即,只需将其写入共享容器应用程序组,但目前,我只是做这样的事情:
if let item = extensionContext?.inputItems.first as? NSExtensionItem {
if let itemProvider = item.attachments?.first as? NSItemProvider {
if itemProvider.hasItemConformingToTypeIdentifier(contentTypeImage) {
itemProvider.loadItem(forTypeIdentifier: contentTypeImage, options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? URL {
_ = self.openURL(URL(string: "cpc:/
if let image = NSData(contentsOf: shareURL) {
_ = self.writeSharedData(data: image, to: shareURL.lastPathComponent)
}
self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
}
})
} else if itemProvider.hasItemConformingToTypeIdentifier(contentTypePDF) {
itemProvider.loadItem(forTypeIdentifier: contentTypePDF, options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? URL {
_ = self.openURL(URL(string: "cpc:/
if let pdf = NSData(contentsOf: shareURL) {
_ = self.writeSharedData(data: pdf, to: shareURL.lastPathComponent)
}
self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
}
})
} else if itemProvider.hasItemConformingToTypeIdentifier(contentTypeMovie) {
itemProvider.loadItem(forTypeIdentifier: contentTypeMovie, options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? URL {
_ = self.openURL(URL(string: "cpc:/
if let pdf = NSData(contentsOf: shareURL) {
_ = self.writeSharedData(data: pdf, to: shareURL.lastPathComponent)
}
self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
}
})
} else if itemProvider.hasItemConformingToTypeIdentifier(contentTypeURL) {
itemProvider.loadItem(forTypeIdentifier: contentTypeURL, options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? URL {
_ = self.openURL(URL(string: "cpc:/
self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
}
})
} else {
extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
}
}
}
它分别处理类型,因此非常冗长,所以我不知道是否有任何方法可以检查和处理图像,pdf,照片的TypeIdentifier,只需1个if语句:
if itemProvider.hasItemConformingToTypeIdentifier(contentTypeURL) {
}
谢谢, 宣
答案 0 :(得分:0)
您应该有3个条件,因为没有属性或方法来获取项目提供者类型。但您可以通过将公共代码移动到单独的方法来简化代码。
func loadItem(itemProvider: NSItemProvider, contentType: NSString) {
itemProvider.loadItem(forTypeIdentifier: contentType, options: nil, completionHandler: { (url, error) -> Void in
if let shareURL = url as? URL {
if (type == contentTypeURL) {
//URL operation goes here
} else {
if let data = NSData(contentsOf: shareURL) {
self.writeSharedData(data: data, to: shareURL.lastPathComponent)
}
}
}
self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
})
}
调用方法如下
if itemProvider.hasItemConformingToTypeIdentifier(contentTypeImage) {
loadItem(itemProvider: itemProvider, contentType: contentTypeImage)
} else if itemProvider.hasItemConformingToTypeIdentifier(contentTypePDF) {
loadItem(itemProvider: itemProvider, contentType: contentTypePDF)
} else if itemProvider.hasItemConformingToTypeIdentifier(contentTypeMovie) {
loadItem(itemProvider: itemProvider, contentType: contentTypeMovie)
} else if itemProvider.hasItemConformingToTypeIdentifier(contentTypeURL) {
loadItem(itemProvider: itemProvider, contentType: contentTypeURL)
} else {
self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil)
}