视图控制器不符合协议,即使所有方法都已实现

View Controller not conforming to protocol, even though all methods are implemented

我已经使用 CocoaPods 将库 MBDocCapture 添加到我的项目中。现在,正如其自述文件所建议的那样,我使我的视图控制器符合 ImageScannerControllerDelegate 并将所有 4 种协议方法添加到我的代码中:

extension DocumentUploaderViewController: ImageScannerControllerDelegate {
    func imageScannerController(_ scanner: ImageScannerController, didFinishScanningWithResults results: ImageScannerResults) {
        scanner.dismiss(animated: true)
    }

    func imageScannerController(_ scanner: ImageScannerController, didFinishScanningWithPage1Results page1Results: ImageScannerResults, andPage2Results page2Results: ImageScannerResults) {
        scanner.dismiss(animated: true)
    }

    func imageScannerControllerDidCancel(_ scanner: ImageScannerController) {
        scanner.dismiss(animated: true)
    }

    func imageScannerController(_ scanner: ImageScannerController, didFailWithError error: Error) {
        scanner.dismiss(animated: true)
    }
}

现在,Xcode (10.2.1) 抱怨我仍然缺少一些协议存根:

Type 'DocumentUploaderViewController' does not conform to protocol 'ImageScannerControllerDelegate'
Do you want to add protocol stubs?

当我按下 Fix 时,Xcode 添加 didFailWithError 方法:

func imageScannerController(_ scanner: ImageScannerController, didFailWithError error: Error) {
}

...然后抱怨我添加了无效的方法重新声明(因为它已经存在!):

Invalid redeclaration of 'imageScannerController(_:didFailWithError:)'

我已经试过了:

None 这些尝试有帮助。
有什么想法吗?

不要手动添加方法。删除所有方法 & 当 xcode 抱怨时 - “类型 'DocumentUploaderViewController' 不符合协议 'ImageScannerControllerDelegate' 您要添加协议存根吗?

只需单击“修复”。你完成了。

  1. 在整个项目中查找方法,这种错误一般发生在函数名称相似或者声明了两次的情况下。
  2. 检查您是否已将委托设置为适当的视图控制器。类似于:

    let scannerViewController = ImageScannerController()

    scannerViewController.imageScannerDelegate = self

您的项目中可能明确定义了 Error 模型(结构或 class),这导致了此问题。

要解决此问题,您有两种选择:

  1. 重命名您的模型,如 MyError
  2. 或将方法的声明更改为didFailWithError error: Swift.Error

当模型范围存在冲突时,总是会出现此错误。当前为 extension DocumentUploaderViewController: ImageScannerControllerDelegate 编写的委托存根正在考虑在本地范围内定义的项目的 Error 模型,而委托存根期望在 Swift 中定义的 Error 模型。