视图控制器不符合协议,即使所有方法都已实现
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:)'
我已经试过了:
- 建设
- 清理派生数据
- 清理并构建
- 退出 Xcode、清理、构建
- 重启我的 Mac (10.14.3),打开 Xcode,清理,构建
None 这些尝试有帮助。
有什么想法吗?
不要手动添加方法。删除所有方法 & 当 xcode 抱怨时 - “类型 'DocumentUploaderViewController' 不符合协议 'ImageScannerControllerDelegate'
您要添加协议存根吗?
只需单击“修复”。你完成了。
- 在整个项目中查找方法,这种错误一般发生在函数名称相似或者声明了两次的情况下。
检查您是否已将委托设置为适当的视图控制器。类似于:
let scannerViewController = ImageScannerController()
scannerViewController.imageScannerDelegate = self
您的项目中可能明确定义了 Error
模型(结构或 class),这导致了此问题。
要解决此问题,您有两种选择:
- 重命名您的模型,如
MyError
- 或将方法的声明更改为
didFailWithError error: Swift.Error
当模型范围存在冲突时,总是会出现此错误。当前为 extension DocumentUploaderViewController: ImageScannerControllerDelegate
编写的委托存根正在考虑在本地范围内定义的项目的 Error
模型,而委托存根期望在 Swift 中定义的 Error
模型。
我已经使用 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:)'
我已经试过了:
- 建设
- 清理派生数据
- 清理并构建
- 退出 Xcode、清理、构建
- 重启我的 Mac (10.14.3),打开 Xcode,清理,构建
None 这些尝试有帮助。
有什么想法吗?
不要手动添加方法。删除所有方法 & 当 xcode 抱怨时 - “类型 'DocumentUploaderViewController' 不符合协议 'ImageScannerControllerDelegate' 您要添加协议存根吗?
只需单击“修复”。你完成了。
- 在整个项目中查找方法,这种错误一般发生在函数名称相似或者声明了两次的情况下。
检查您是否已将委托设置为适当的视图控制器。类似于:
let scannerViewController = ImageScannerController()
scannerViewController.imageScannerDelegate = self
您的项目中可能明确定义了 Error
模型(结构或 class),这导致了此问题。
要解决此问题,您有两种选择:
- 重命名您的模型,如
MyError
- 或将方法的声明更改为
didFailWithError error: Swift.Error
当模型范围存在冲突时,总是会出现此错误。当前为 extension DocumentUploaderViewController: ImageScannerControllerDelegate
编写的委托存根正在考虑在本地范围内定义的项目的 Error
模型,而委托存根期望在 Swift 中定义的 Error
模型。