如何从swift中的函数返回UIImage?

时间:2015-04-09 06:02:02

标签: ios swift uiimage return

我正在从Parse下载图像(成功)。我的问题是,我可以将获取图像的函数放在一个单独的类中,只是将 UIImage 作为返回的参数吗?见下面的例子。

在下面函数的两个return语句中,我收到此错误:

enter image description here

func getImgfromParse() -> UIImage {

    //var imgFile: PFFile = PFFile()
    var query = PFQuery(className: "puzzledata")
    query.whereKey("wordAnswer", equalTo: "asd")
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil {
            println("Found something")
            for object in objects {
                println(object.objectId)

                let pointsPerTile = object["pointsPerTile"] as String
                let timeAllowed = object["timeAllowed"] as String
                let wordAnswer = object["wordAnswer"] as String
                let wordJumbled = object["wordJumbled"] as String

                let imgFile = object["imageFile"] as PFFile


                imgFile.getDataInBackgroundWithBlock({
                    (imageData: NSData!, error: NSError!) -> Void in
                    if (error == nil) {
                        let image = UIImage(data:imageData)
                        return image
                    }

                })//getDataInBackgroundWithBlock - end

            }
        }
        else {
            println("%@", error)
        }

        return UIImage(data: "profile.jpg")
    }
}

2 个答案:

答案 0 :(得分:2)

我认为问题出在你的块中

imgFile.getDataInBackgroundWithBlock({
                    (imageData: NSData!, error: NSError!) -> Void in
                    if (error == nil) {
                        let image = UIImage(data:imageData)
                        return image
                    }

                })//getDataInBackgroundWithBlock - end

你可以看到该块提供了两个图像数据和错误,并期望你什么都不返回,即无效,但你从这里返回图像,这就是为什么它显示错误为&#39 ;无法将表达式UIImage转换为void'。

我认为不是返回图像,而是应该调用一个以图像为参数的函数,并将图像保存在那里/用图像做你的东西

imgFile.getDataInBackgroundWithBlock({
                    (imageData: NSData!, error: NSError!) -> Void in
                    if (error == nil) {
                        let image = UIImage(data:imageData)
                        saveImage(image)
                    }

                })//getDataInBackgroundWithBlock - end

答案 1 :(得分:0)

你的方法是当前的,我使用的是这样的,但是这里工作得很好..你也可以这个..

    func imageResize (imageObj:UIImage, sizeChange:CGSize)-> UIImage{

     let hasAlpha = false
    let scale: CGFloat = 0.0 // Automatically use scale factor of main screen

    UIGraphicsBeginImageContextWithOptions(sizeChange, !hasAlpha, scale)
    imageObj.drawInRect(CGRect(origin: CGPointZero, size: sizeChange))

    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
    return scaledImage
}

答案来源: - http://www.jogendra.com/2014/11/image-resize-in-swift-ios8.html

请看这个答案一切正常