Swift 将图像保存到照片库并检索URL

Swift 将图像保存到照片库并检索URL,swift,swiftui,Swift,Swiftui,我可以使用以下代码将图像保存到我的照片库中: PHPhotoLibrary.shared().performChanges({ PHAssetCreationRequest .creationRequestForAssetFromImage(atFileURL: outfileURL) }) { (saved, err) in print("Saved?", sav

我可以使用以下代码将图像保存到我的照片库中:

        PHPhotoLibrary.shared().performChanges({
            PHAssetCreationRequest
                .creationRequestForAssetFromImage(atFileURL: outfileURL)
        }) { (saved, err) in
            print("Saved?", saved)
            if (saved) {
                DispatchQueue.main.async {
                    onComplete(outfileURL.absoluteString)                        
                }
            }
        }
但是我正在尝试加载我刚刚保存在图像(SwiftUI)中的图像,我想获取新图像的fileURL。
outfileURL
是一个临时文件,不保留。请注意,这是一个gif-如果有任何轴承

我正在尝试使用
PHObjectPlaceholder
东西,但我仍然不知道如何获取位置:

            var placeHolder: PHObjectPlaceholder? = nil
            PHPhotoLibrary.shared().performChanges({
                let changeRequest = PHAssetCreationRequest.creationRequestForAssetFromImage(atFileURL: outfileURL)
                placeHolder = changeRequest?.placeholderForCreatedAsset
            }) { (saved, err) in
                print("Saved? \(saved) to location \(placeHolder?)") //<--- AAAARGH!!!!
                if (saved) {
                    DispatchQueue.main.async {
                        
                        onComplete(/*????*/)
                        
                    }
                }
            }
   
var占位符:PHObjectPlaceholder?=无
PHPhotoLibrary.shared().performChanges({
let changeRequest=PHAssetCreationRequest.creationRequestForAssetFromImage(atFileURL:outfileURL)
占位符=changeRequest?.placeholderForCreatedAsset
}){(已保存,错误)在

PHObjectPlaceholder
打印(“已保存?\(已保存)到位置\(占位符?)/,您可以使用
localIdentifier

let fetchOptions = PHFetchOptions()
let fetchResult: PHFetchResult = PHAsset.fetchAssets(withLocalIdentifiers: [placeholder.localIdentifier], options: fetchOptions)
if let asset = fetchResult.firstObject {
    // Here you can get UIImage from PHAsset
} 
因此,这是可能的解决方案:

    var placeHolder: PHObjectPlaceholder? = nil
    PHPhotoLibrary.shared().performChanges({
        let changeRequest = PHAssetCreationRequest.creationRequestForAssetFromImage(atFileURL: outfileURL)
        placeHolder = changeRequest?.placeholderForCreatedAsset
    }) { (saved, err) in
        if let localIdentifier = placeHolder?.localIdentifier, saved {
            let fetchOptions = PHFetchOptions()
            let fetchResult = PHAsset.fetchAssets(withLocalIdentifiers: [localIdentifier], options: fetchOptions)
            if let phAsset = fetchResult.firstObject {
                let targetSize = CGSize(width: CGFloat(phAsset.pixelWidth), height: CGFloat(phAsset.pixelHeight))
                let options = PHImageRequestOptions()
                PHCachingImageManager.default().requestImage(for: phAsset, targetSize: targetSize, contentMode: .aspectFill, options: options) { (uiImage, info) in
                    DispatchQueue.main.async {
                        onComplete(uiImage)
                    }
                }
            }
        }
    }