我正在实现将图像从Safari拖放到我自己的应用程序的collectionView中的功能。我需要dragItem中的 UIImage 和图像网址。
获取任何一个的方法是使用UIDragItem.itemProvider.loadObject
。但是由于loadObject(ofClass:completionHandler:)
运行asynchronously,下面的代码如何确保没有竞争条件?
(注意:这两个函数位于performDropWith
函数中,我想确保它们按顺序执行,因为我需要在第二个函数完成后立即进行工作)
var imageARAndURL = [String: Any]()
_ = item.dragItem.itemProvider.loadObject(ofClass: UIImage.self) { (provider, error) in
if let image = provider as? UIImage {
let aspectRatio = image.size.height / image.size.width
print(aspectRatio)
imageARAndURL["aspectRatio"] = aspectRatio
}
}
_ = item.dragItem.itemProvider.loadObject(ofClass: URL.self) { (provider, error) in
if let url = provider {
print(url.imageURL)
imageARAndURL["imageURL"] = url.imageURL
print(imageARAndURL)
}
}