2015-04-09 3 views
2

Я загружаю изображение (успешно) из Parse. Мой вопрос: могу ли я поместить функцию, которая получает изображение в отдельном классе, и просто получить UIImage в качестве возвращаемого параметра? См. Пример ниже.Как вернуть UIImage из функции в swift?

В обоих заявлениях возвращения в функции ниже я получаю эту ошибку:

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

ответ

0

Ваш метод является currect, я же, как это, но здесь работает нормально .. вы можете Кроме того, этот .. источник

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

Пожалуйста, смотрите этот ответ все работает нормально

2

Я думаю, что проблема в вашем блоке

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

       })//getDataInBackgroundWithBlock - end 

как вы можете видеть, что блок содержит две вещи ImageData и ошибок, и ожидает, что вы не вернуть ничего есть пустота, но вы возвращаете изображение здесь, поэтому он показывает ошибку как «не может преобразовать выражения типа UIImage, чтобы ввести void».

я думаю, а не возвращать изображения, вы должны вызвать функцию с изображением в качестве параметра и сохранить это изображение есть/сделать ваши вещи с изображением, как

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

       })//getDataInBackgroundWithBlock - end 
+1

Ваш ответ выглядит правильно, но эта функция шахты фактически в отдельном классе-помощнике, чем фактический класс viewcontroller, где мне нужен этот UIImage. Как я могу вернуть UIIMage из этой функции? Я попытался сделать var retImg: UIImage в fucntion и присвоить retImg = image, но это тоже не сработало. – user1406716