检查照片集以查找匹配的网址

时间:2018-05-18 15:02:06

标签: arrays swift

我有一组用户从照片库中选择的网址图片。有没有一种快速的方法可以从照片库中获取这些资产(它们永远不会超过5个),而无需迭代所有用户的照片(在我的测试中非常慢)。

以下是我现在使用的代码:

func loadCollectionView() {

    arrImageViews.removeAll()

    let options = PHFetchOptions()
    //options.predicate = NSPredicate(format: "favorite == YES")
    options.sortDescriptors = [
        NSSortDescriptor(key: "creationDate", ascending: true)
    ]

    let results = PHAsset.fetchAssets(with: .image, options: options)
    var assets: [PHAsset] = []
    results.enumerateObjects { (object, _, _) in
        if let asset = object as? PHAsset {
            assets.append(asset)
        }
    }

    let manager = PHImageManager.default()


    for thisAsset in assets {

        thisAsset.getPHAssetURL(completionHandler: {(assetURL) in
            if let strAssetURL = assetURL?.absoluteString {
                if self.arrImagePaths.contains(strAssetURL) {

                    manager.requestImage(for: thisAsset, targetSize: CGSize(width: 80.0, height: 80.0), contentMode: .aspectFit, options: nil, resultHandler: {(thisImage, _) in
                        self.arrImageViews.append(UIImageView(image: thisImage))
                        self.cImages.reloadData()
                    })

                }
            }

        })

    }



}

getPHAssetURL是一个从资产中提取网址的扩展程序。

所以我要找的是assetURL?.absoluteString与我的数组中的字符串之间的匹配。

1 个答案:

答案 0 :(得分:1)

检查了docs后,我想如果您只想获取一个选定PHAsset的信息,可以试试这个:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    guard let asset = info[UIImagePickerControllerPHAsset] as? PHAsset else { return }
    let localId = asset.localIdentifier
    //Save this variable in your model.
}

如果您在集合视图中实施了多照片选择,则必须查看其文档,了解如何获取所选媒体的PHAssets。但它应该很容易。

然后使用var localIds: [String],您可以尝试:

let options = PHFetchOptions()
options.sortDescriptors = [
    NSSortDescriptor(key: "creationDate", ascending: true)
]
let results = PHAsset.fetchAssets(withLocalIdentifiers: localIds, options: options)

请注意,您可以根据键here在获取请求中使用谓词执行进一步过滤。