Swift 未调用协议扩展

Swift protocol extension not being called

我试图对协议 UIScrollViewDelegate 进行默认实现,例如:

extension UIScrollViewDelegate {
     func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
         //...
     }
}

但在 subclass UITableViewController 中(符合 UIScrollViewDelegate 并且)不包含此方法的任何实现(既不在 base class 中也不在 subclass), 这个扩展提供的实现不会被调用

是否有任何解决方案可以为这些方法提供默认实现?

只需创建 UIScrollView 的扩展以符合 UIScrollViewDelegate 协议,如下所示:

extension UIScrollView: UIScrollViewDelegate {
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        // ...
    }
}

您正在尝试对 Objective-C 协议进行 Swift 协议扩展。这永远行不通,因为 Objective-C 无法 看到 一个 Swift 协议扩展,所以 Cocoa(即 Objective-C)永远不会了解您的实现并且永远不会调用它。