2017-07-18 105 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() 
    } 
}