错误:“ViewController”与扩展协议的冗余一致性

Posted

技术标签:

【中文标题】错误:“ViewController”与扩展协议的冗余一致性【英文标题】:Error: Redundant conformance of 'ViewController' to protocol with extension 【发布时间】:2018-01-26 13:14:59 【问题描述】:

当我尝试这个时,我得到了错误:

class ViewController: UIViewController, UIScrollViewDelegate 
    ......
    

extension ViewController: UIScrollViewDelegate  // Error: Redundant conformance of 'ViewController' to protocol 'UI
    ....

当我尝试这个时,我没有收到错误:

class ViewController: UIViewController 
        ......
        

extension ViewController: UIScrollViewDelegate  // No error
            ...
        

为什么我在使用扩展时没有将 UIScrollViewDelegate 添加到 ViewController 中?

如果一个类是 UIViewController 类型意味着它符合 UIScrollViewDelegate ?

【问题讨论】:

一个扩展继承了它扩展的类型的所有功能。采用两次协议与两次声明属性或方法相同。 【参考方案1】:

在第一个代码示例中,您已经通过类声明添加了对UIScrollViewDelegate 的一致性。

现在,当您尝试使用扩展名再次符合 UIScrollViewDelegate 时,swift 会向您尖叫。

对于第二个代码示例,在扩展中添加了一致性。在添加扩展之前,该类不符合UIScrollViewDelegate

【讨论】:

【参考方案2】:

错误是不言自明的。您不必多次遵守协议。 你可以做 1)

class ViewController: UIViewController, UIScrollViewDelegate 
    ......
    

2)

class ViewController: UIViewController 
            ......
            


extension ViewController: UIScrollViewDelegate  // No error
            ...
        

在情况 1 中,您不需要扩展,因为类本身采用了协议。 扩展的目的是为类添加更多功能。情况2,很明显扩展采用了协议。

【讨论】:

以上是关于错误:“ViewController”与扩展协议的冗余一致性的主要内容,如果未能解决你的问题,请参考以下文章

Swift UITableView 控制器错误:类型“ViewController”不符合协议“UITableViewDataSource”

类型“ViewController”不符合协议

类型“ViewController”不符合协议“UITableViewDataSource”

类型 ViewController 不符合协议 SKPaymentTransactionObserver

ios 8.1:类型“ViewController”不符合协议“UICollectionViewDataSource”

如何使用扩展设置 viewController 搜索栏的委托?