【问题标题】:Missing return in a function expected to return 'UIImage'预期返回“UIImage”的函数中缺少返回
【发布时间】:2017-07-18 01:53:54
【问题描述】:

我是 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")
    }
}

【问题讨论】:

    标签: ios swift switch-statement


    【解决方案1】:

    当代码的并非所有路径都返回值时,会发生此错误。如果您说您的方法返回 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()。它只会使您的应用程序崩溃。如果您这样做,则该方法不需要返回任何内容。应用程序最终崩溃了。

    【讨论】:

      【解决方案2】:

      在每种情况下,您都需要返回 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()
        }
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2019-05-14
          • 2018-07-22
          • 1970-01-01
          • 1970-01-01
          • 2020-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多