我是斯威夫特的初学者 目前,我正在使用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")
}
}
答案 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()