Использование assetForURL в Swift 1.2
Я пытаюсь получить изображение, которое находится в библиотеке фотографий, и я использую 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
}
}
Я не знаю, что мне не хватает.. спасибо!
2 ответа
ALAssetsLibraryAssetForURLResultBlock
а также ALAssetsLibraryAccessFailureBlock
не возвращать значение. (-> Void
значит нет возвращаемого значения.)
(ALAsset!) -> Void
или же (NSError!) -> Void
Так что не стоит возвращаться image
или же error
внутри этих блоков. Например, просто назначьте локальную переменную в блоке. И вернуть переменную вне блока.
Как ниже:
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
}
}
Кишикава Кацуми, ты был прав! проблема была в возврате, я меняю свой метод так, и он отлично работает:
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)
})
}
Спасибо!!