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

Ios 预期返回的函数中缺少返回';UIImage';,ios,swift,switch-statement,Ios,Swift,Switch Statement,我是Swift的初学者。 目前,我正在使用AVFoundation创建摄像头应用程序。 我正在从处理A编码到处理B。 但是,显示了以下错误。 错误: 预期返回“UIImage”的函数中缺少返回 我不知道如何在switch语句中使用return //Processing A func captureImage(_ sampleBuffer: CMSampleBuffer) -> UIImage { ..... switch self.input.device.position

我是Swift的初学者。
目前,我正在使用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")
    }
}

当并非所有代码路径都返回值时,会发生此错误。如果您说您的方法返回一个
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
不是这两个值呢?该方法将只打印“error”,不返回任何内容。这是不能接受的,是吗

你可能会说,“我确定在这种情况下,
input.device.position
只能是前面或后面。它不能是其他任何东西!”嗯,编译器对此不确定。它只看到
input.device.position
还有其他可能的值


在这种情况下,我建议您在这两个值都不是的情况下执行
fatalError()
。它只会使你的应用程序崩溃。如果执行此操作,则该方法不需要返回任何内容。应用程序终究会崩溃。

如果不是所有代码路径都返回值,则会发生此错误。如果您说您的方法返回一个
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
不是这两个值呢?该方法将只打印“error”,不返回任何内容。这是不能接受的,是吗

你可能会说,“我确定在这种情况下,
input.device.position
只能是前面或后面。它不能是其他任何东西!”嗯,编译器对此不确定。它只看到
input.device.position
还有其他可能的值


在这种情况下,我建议您在这两个值都不是的情况下执行
fatalError()
。它只会使你的应用程序崩溃。如果执行此操作,则该方法不需要返回任何内容。应用程序终究还是崩溃了。

请参阅“清扫者回答”,以获得有关为什么会遇到此错误的可靠解释。然而,在打印“error”之后,我只会在默认情况下返回一个空白UIImage<代码>返回UIImage()

请参阅“清扫器答案”,以获得有关为何会遇到此错误的详细解释。然而,在打印“error”之后,我只会在默认情况下返回一个空白UIImage<代码>返回UIImage()

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

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