【发布时间】:2015-06-28 07:49:47
【问题描述】:
从 Swift 2 开始,可以在协议中为将实现这些协议的类提供我们自己的方法实现 (protocol default implementation)。但是我们可以覆盖现有的方法吗?
在我看来,Swift 2 中的协议看起来像是协议 + 类别的混合体。虽然总的来说它很好并且开始促进基于组合的编程而不是基于继承的编程,但是我缺乏覆盖现有方法的可能性,因此具有完全的控制和灵活性并具有完全的组合。这意味着能够使用默认实现获取一堆协议,为我的类添加所需的行为(并在需要时覆盖)。如果不能直接解决,也许有办法解决这个问题?
更新。我想这样做的原因是我不喜欢使用 UITableViewController 和 UICollectionViewController。相反,我有自己的顶级超类 CoreViewController 和几个二级基类(BaseViewController、BaseDetailsViewController 和 BaseWebViewController),其中包含所有常见的共享代码。是的,这是继承,我希望使用组合有一个不同的实现,因此我喜欢 Swift 2 的协议方法。这样我就可以使用 UITableViewController(带有静态单元格)并且仍然附上我的通用代码。但是,我需要能够覆盖其方法,例如 alloc。我有一个非常简单的(这个方法的实现)[https://github.com/GitTennis/SuccessFramework/blob/master/Templates/BusinessApp/BusinessApp/Core/CoreViewController.m],它可以智能地为我的通用应用程序自动选择正确的视图控制器类(我所有的视图控制器都有 _ipad 或 _iphone 后缀)。
【问题讨论】:
-
如果你想使用默认的协议实现,你不能在你的具体类型中不提供那个方法吗?或者我没有正确理解你的问题;你能提供一些示例代码吗?
-
@ABakerSmith 检查我的更新