为什么我的控制器不符合 NSObjectProtocol?

Sal*_*Ali 2 xcode ios swift swift-protocols

我正在使用 Xcode 和 swift 3 为我开发一个项目。我想做的是如下。

class SCViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate{
    //code here
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误SCViewController不符合协议NSObjectProtocol

我想同时遵守 UIViewController 和 AVCaptureMetadataOutputObjectsDelegate。请帮助我解决这个问题。

Dom*_*her 5

看看这个:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html

您需要实现协议功能才能符合该协议。如果没有这个协议一致性就毫无用处,你不觉得吗?:) 无论如何,通过扩展中的协议来扩展类总是更好,如下所示:

extension SCViewController: AVCaptureMetadataOutputObjectsDelegate{
    //code here
}
Run Code Online (Sandbox Code Playgroud)

更广泛的描述:如您所见,委托实现为“superProtocol”NSObjectProtocol,

看到这个:

https://developer.apple.com/documentation/avfoundation/avcapturemetadataoutputobjectsdelegate

所以只要实现 NSObjectProtocol 函数就可以了...快乐编码:)

编辑:在意识到我是一个彻底的白痴并忘记了基本的事情之后 - >这应该可以工作,因为 UIViewController 类是 UIResponder 的子类,而 UIResponder 是 NSObject 的子类,因此类名或类似的东西可能有问题......会尝试强迫编译器做奇怪的事情,它会做什么......像这样:

extension SCViewController: NSObject, AVCaptureMetadataOutputObjectsDelegate{
    //code here
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,上面的这个绝对应该有效。