在预期返回的函数中缺少返回' UIImage'

时间:2017-07-18 01:53:54

标签: ios swift switch-statement

我是斯威夫特的初学者 目前,我正在使用AVFoundation来创建相机应用程序 我正在从处理A编码到处理B. 但是,显示以下错误 错误:

  

在预期返回的函数中缺少返回' UIImage'。

我不知道如何在switch语句中使用return。

//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 个答案:

答案 0 :(得分: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(),而不是那些值。它会让您的应用崩溃。如果你这样做,那么该方法不需要返回任何东西。该应用程序毕竟崩溃了。

答案 1 :(得分:1)

在每种情况下,您都需要返回UIImage。如果case是default,则返回一个空的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()
  }
}

答案 2 :(得分:0)

请参阅Sweepers答案,了解您遇到此错误的原因。但是,在打印“错误”后,我会在默认情况下返回一个空白的UIImage。 return UIImage()