方法是否可以被协议默认实现覆盖



从Swift 2开始,可以在协议中为将实现这些协议的类提供我们自己的方法实现(协议默认实现)。但是我们能覆盖现有的方法吗?

对我来说,Swift 2中的协议看起来像是协议+类别的混合。虽然总的来说,这很好,并开始促进基于组合的编程而不是基于继承的编程,但我缺乏覆盖现有方法的可能性,因此具有完全的控制和灵活性,并具有完全的组合。这意味着能够使用默认实现获取一堆协议,为我的类添加所需的行为(并在需要时覆盖)。如果不可能直接解决,也许有办法解决这个问题?

更新。我之所以要这样做,是因为我不喜欢使用UITableViewController和UICollectionViewController。相反,我有自己的顶级超类CoreViewController和两个二级基类(BaseViewController、BaseDetailsViewController和BaseWebViewController),其中包含所有常见的共享代码。是的,这是继承,我希望有一个不同的实现使用组合,所以我喜欢Swift 2方法和协议。通过这种方式,我将能够使用UITableViewController(带有静态单元格),并且仍然附加我的公共代码。然而,我需要能够覆盖它的couple方法,例如alloc。我有相当简单的(实现这个方法)[https://github.com/GitTennis/SuccessFramework/blob/master/Templates/BusinessApp/BusinessApp/Core/CoreViewController.m],它智能地自动为我的通用应用程序选择正确的视图控制器类(我的所有视图控制器都有_ipad或_iphone后缀)。

根据我在WWDC视频中回忆的内容,如果一个类为一个方法提供了一个实现,该方法也有一个协议默认实现,那么该类中的一个将获胜。也就是说,只有当类没有提供协议实现时,才使用协议实现。

国际海事组织,如果这是另一种方式(或者如果有另一种通过协议实施来推翻类别实施),这将打开一些令人讨厌的大门。例如,突然间,标准框架的功能也因此而不同。

无论如何,为什么要通过协议默认实现覆盖现有的类方法?

最新更新