在Swift 1.2中使用assetForURL

时间:2015-04-17 12:08:12

标签: ios swift photo-gallery assetslibrary

我试图获取照片库上的图像,并且我为此目的使用assetForURL,但我总是得到错误"无法调用' assetForURL'使用类型'的参数列表(NSURL,resultBlock:(ALAsset!) - > Void,(NSError!) - > Void)'"

我在这里检查了问题以及其他人如何使用该方法,但我总是得到同样的错误..这是我的方法:

class func getImageFromPath(path: String) -> UIImage? {
    let assetsLibrary = ALAssetsLibrary()
    let url = NSURL(string: path)!

    assetsLibrary.assetForURL(url, resultBlock: { (asset: ALAsset!) -> Void in
        return UIImage(CGImage: asset.defaultRepresentation().fullResolutionImage())
    }) { (error: NSError!) -> Void in
        return nil
    }
}

我不知道我错过了什么...... thx!

2 个答案:

答案 0 :(得分:3)

ALAssetsLibraryAssetForURLResultBlockALAssetsLibraryAccessFailureBlock不会返回值。 (-> Void表示没有返回值。)

(ALAsset!) -> Void(NSError!) -> Void

因此,您不应在这些块中返回imageerror。例如,只在块中分配局部变量。并在块外返回变量。

如下所示:

class func getImageFromPath(path: String) -> UIImage? {
    let assetsLibrary = ALAssetsLibrary()
    let url = NSURL(string: path)!

    var image: UIImage?
    var loadError: NSError?
    assetsLibrary.assetForURL(url, resultBlock: { (asset) -> Void in
        image = UIImage(CGImage: asset.defaultRepresentation().fullResolutionImage().takeUnretainedValue())
    }, failureBlock: { (error) -> Void in
        loadError = error;
    })

    if (!error) {
        return image
    } else {
        return nil
    }
}

答案 1 :(得分:0)

Kishikawa katsumi,你是对的!问题是回归,我改变了我的方法,它完美无缺:

class func getImageFromPath(path: String, onComplete:((image: UIImage?) -> Void)) {
    let assetsLibrary = ALAssetsLibrary()
    let url = NSURL(string: path)!
    assetsLibrary.assetForURL(url, resultBlock: { (asset) -> Void in
        onComplete(image: UIImage(CGImage: asset.defaultRepresentation().fullResolutionImage().takeUnretainedValue()))
        }, failureBlock: { (error) -> Void in
            onComplete(image: nil)
    })
}

THX !!