Ios 预期返回的函数中缺少返回';UIImage';
我是Swift的初学者。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
目前,我正在使用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()
}
}