我正在编写一个相册应用程序,该应用程序可以从用户的照片库中访问照片,添加滤镜和删除照片。我使用照片框架删除了带有PHAssetChangeRequest.deleteAssets(assetToDelete)
的资产。这里的资产类别是 PHAsset
.
// Delete the photo from library
@IBAction func deleteBtnPressed(_ sender: Any) {
let assetToDelete = self.asset
if let assetToDelete = assetToDelete
{
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.deleteAssets(assetToDelete)
})
}
}
但是这里会发生错误,"参数类型'PHAsset'不符合预期的类型'NSFastEnumeration'"。
所以我按照 Xcode 的建议更改了资产的类型:
PHAssetChangeRequest.deleteAssets(assetToDelete as! NSFastEnumeration)
它仍然不起作用,错误显示:
无法将类型"PHAsset"的值强制转换为"NSFastEnumeration"
有谁知道如何处理这个问题?谢谢!
线索在名称"assets"复数中 - API 需要一个数组或任何其他符合 NSFastEnumeration 的集合类型,例如 Set
PHAssetChangeRequest.deleteAssets([assetToDelete] as NSArray)
https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets
更正确的方法是先从库中获取:
let assetIdentifiers = assetsToDeleteFromDevice.map({ $0.localIdentifier })
let assets = PHAsset.fetchAssets(withLocalIdentifiers: assetIdentifiers, options: nil)
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.deleteAssets(assets)
})