2017-07-18 138 views
0

我是Swift的初學者。
目前,我正在使用AVFoundation創建相機應用程序。
我正在從處理A編碼到處理B.
但是,顯示以下錯誤。
錯誤:缺少函數返回'UIImage'

Missing return in a function expected to return 'UIImage'.

我不知道如何使用在switch聲明回報。

//Processing A 
func captureImage(_ sampleBuffer: CMSampleBuffer) -> UIImage { 
    ..... 
    switch self.input.device.position { 
     case .front: 
      let resultImage = UIImage(cgImage: imageRef, scale: 1.0, orientation: UIImageOrientation.down) 
      return resultImage 
     case .back: 
      let resultImage = UIImage(cgImage: imageRef, scale: 1.0, orientation: UIImageOrientation.up) 
      return resultImage 
     default: 
      print("error") 
    } 
} 

enter image description here

回答

3

此錯誤時,不是你的代碼的所有路徑返回一個值出現。如果你說你的方法返回UIImage,它必須始終做

讓我們來仔細看看的captureImage實現:

func captureImage(_ sampleBuffer: CMSampleBuffer) -> UIImage { 
    ..... 
    switch self.input.device.position { 
     case .front: 
      let resultImage = UIImage(cgImage: imageRef, scale: 1.0, orientation: UIImageOrientation.down) 
      return resultImage 
     case .back: 
      let resultImage = UIImage(cgImage: imageRef, scale: 1.0, orientation: UIImageOrientation.up) 
      return resultImage 
     default: 
      print("error") 
    } 
} 

我們可以看到,如果input.device.position.front.back,該方法返回一個值。但是,如果input.device.position既不是那些值呢?該方法將只打印「錯誤」,不返回任何內容。這不可接受嗎?

你可能會說:「我確信input.device.position只能在這種情況下是前面或後面,它不能是其他任何東西!」那麼,編譯器是不確定的。它只是看到input.device.position還有其他可能的值。

在這種情況下,我建議你只是在fatalError()的情況下,它不是那些值。它只會讓你的應用程序崩潰。如果你這樣做,那麼該方法不需要返回任何東西。畢竟應用程序崩潰了。

0

See Sweepers回答了你爲什麼遇到這個錯誤的可靠解釋。但是,在打印「錯誤」後,我會簡單地在默認情況下返回空白UIImage。 return UIImage()

0

在每種情況下,您都需要返回UIImage。如果情況是默認情況下只返回一個空的UIImage。

func captureImage(_ sampleBuffer: CMSampleBuffer) -> UIImage { 
..... 
switch self.input.device.position { 
    case .front: 
     let resultImage = UIImage(cgImage: imageRef, scale: 1.0, orientation: UIImageOrientation.down) 
     return resultImage 
    case .back: 
     let resultImage = UIImage(cgImage: imageRef, scale: 1.0, orientation: UIImageOrientation.up) 
     return resultImage 
    default: 
     print("error") 
     return UIImage() 
    } 
}