在 Swift 1.2 中使用assetForURL

Posted

技术标签:

【中文标题】在 Swift 1.2 中使用assetForURL【英文标题】:Using assetForURL in Swift 1.2 【发布时间】:2015-06-24 06:43:11 【问题描述】:

我正在尝试获取照片库中的图像,并且为此目的使用了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
    

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

【问题讨论】:

您是否使用图像选择器让用户选择图像? 是的,但我能获得的唯一路径是以下类型之一:“assets-library://asset/asset.JPG?id=10C39CED-5CB9-49E3-8517-253F82EA3AC2&ext =JP‌​G" 所以我让你使用assetURL方法..有什么想法吗? 好的,你能贴出你用来调用getImageFromPath函数的代码吗? 【参考方案1】:

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
    

【讨论】:

【参考方案2】:

岸川胜美,你是对的!问题是回报,我改变了我的方法,它很完美:

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)
    )

谢谢!!

【讨论】:

以上是关于在 Swift 1.2 中使用assetForURL的主要内容,如果未能解决你的问题,请参考以下文章

UITabBarController 应用程序中 iCloud 同步的核心数据堆栈实现 (Swift 1.2)

addAttribute 在 Swift 1.2 (Xcode 6.3) 中失败

swift 1.2 覆盖 NSManagedObject 扩展中的 prepareForDeletion

如何设置使用导航控制器添加的 TableView 的背景图像 - Swift 1.2

AlamoFire 与 Swift 1.2:“responseJSON”的模糊使用

如何在 Swift 1.2 中初始化自定义 UIView