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

7

我正在编写一个照片相册应用程序,可以从用户的照片库中访问照片,添加滤镜并删除照片。我使用了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)
          })
        }
      }

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

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

PHAssetChangeRequest.deleteAssets(assetToDelete as! NSFastEnumeration)

仍然无法工作,错误显示为:

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

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

2个回答

11

声明:func delete(_ assets: [PHAsset]) {... PHAssetChangeRequest.deleteAssets(assets) ...}。它报错了:“参数类型‘[PHAsset]’不符合预期的‘NSFastEnumeration’类型”。 - Vyachaslav Gerchicov
有趣。尝试将其转换为 as NSArray 吗? - Warren Burton
是的,它可以使用强制类型转换。但是你提到的 [assetToDelete]Swift 数组,而不是 NSArray - Vyachaslav Gerchicov
使用NSArray,就像Burton先生的回答所说的那样,对我有效。 - Markus
如果没有使用,让arrayToDelete = NSArray(object: lastAsset)。 - Paresh. P
显示剩余2条评论

5
更正确的方式是先从库中获取:
let assetIdentifiers = assetsToDeleteFromDevice.map({ $0.localIdentifier })
let assets = PHAsset.fetchAssets(withLocalIdentifiers: assetIdentifiers, options: nil)
PHPhotoLibrary.shared().performChanges({
    PHAssetChangeRequest.deleteAssets(assets)
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接