使用照片框架从照片库中删除照片

Ron*_*Ron 2 photo ios swift phasset phphotolibrary

我正在写一个相册应用程序,它可以访问用户照片库中的照片,添加滤镜和删除照片。我使用Photo框架通过删除了资产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)
          })
        }
      }
Run Code Online (Sandbox Code Playgroud)

但是这里发生错误,“参数类型'PHAsset'与预期类型'NSFastEnumeration'不符”。

所以我按照Xcode建议更改了assetToDelete的类型:

PHAssetChangeRequest.deleteAssets(assetToDelete as! NSFastEnumeration)
Run Code Online (Sandbox Code Playgroud)

它仍然不起作用,错误表明:

无法将类型“ PHAsset”的值强制转换为“ NSFastEnumeration”

有人知道如何处理吗?谢谢!

War*_*ton 6

线索是“资产”的复数形式-API需要一个符合NSFastEnumeration的数组或任何其他集合类型,例如Set

PHAssetChangeRequest.deleteAssets([assetToDelete] as NSArray)

https://developer.apple.com/documentation/photos/phassetchangerequest/1624062-deleteassets


iwa*_*bed 5

更正确的方法是首先从库中获取:

let assetIdentifiers = assetsToDeleteFromDevice.map({ $0.localIdentifier })
let assets = PHAsset.fetchAssets(withLocalIdentifiers: assetIdentifiers, options: nil)
PHPhotoLibrary.shared().performChanges({
    PHAssetChangeRequest.deleteAssets(assets)
})
Run Code Online (Sandbox Code Playgroud)