微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI错误:无法转换“ UIImage”类型的值?关闭结果类型“无效”

如何解决SwiftUI错误:无法转换“ UIImage”类型的值?关闭结果类型“无效”

我收到以下SwiftUI错误

var assetimage : UIImage? {
        if PHPhotoLibrary.authorizationStatus() == .authorized {
            let allPhotosOptions = PHFetchOptions()
            allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate",ascending: true)]
            let assetsFetchResults = PHAsset.fetchAssets(with: allPhotosOptions)
            if assetsFetchResults.count > 0 {
                let asset = assetsFetchResults.lastObject
                if asset != nil {
                    let options = PHImageRequestOptions()
                    options.isNetworkAccessAllowed = true
                    options.version = .current
                    
                    PHCachingImageManager().requestimage(for: asset!,targetSize: CGSize(width: 64 * UIScreen.main.scale,height: 64 * UIScreen.main.scale),contentMode: .aspectFill,options: options,resultHandler: { img,_ in
                        dispatchQueue.main.async {
                            return img //Error Here
                        }
                    })
                } else {
                    return nil
                }
            } else {
                return nil
            }
        }
        return nil
    }

我收到以下错误

Cannot convert value of type 'UIImage?' to closure result type 'Void'

解决方法

当您从completionHandler异步访问图像时,请使用PHCachingImageManager将其更改为使用func assetImage(_ completion: @escaping (UIImage?) -> Void) { if PHPhotoLibrary.authorizationStatus() == .authorized { let allPhotosOptions = PHFetchOptions() allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate",ascending: true)] let assetsFetchResults = PHAsset.fetchAssets(with: allPhotosOptions) if assetsFetchResults.count > 0 { let asset = assetsFetchResults.lastObject if asset != nil { let options = PHImageRequestOptions() options.isNetworkAccessAllowed = true options.version = .current PHCachingImageManager().requestImage(for: asset!,targetSize: CGSize(width: 64 * UIScreen.main.scale,height: 64 * UIScreen.main.scale),contentMode: .aspectFill,options: options,resultHandler: { img,_ in DispatchQueue.main.async { completion(img) } }) } else { completion(nil) } } else { completion(nil) } } else { completion(nil) } } 的方法。

    self.assetImage { (image) in
        
    }

用法

{{1}}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。