【发布时间】:2016-05-05 03:30:46
【问题描述】:
我正在设计一个使用协议和扩展的框架,以允许第三方将我的框架的支持添加到他们现有的类中。
我还想为 UIView 等已知类添加一些内置扩展,但我不想阻止用户为相同的类定义自己的额外支持。
我的问题是有什么方法可以扩展同一个类两次,并且两次都覆盖该类中的相同(协议)方法,同时如果第一个失败,仍然有一些方法可以调用另一个。
阐述:我真的有三个目标要实现:
- 我想让我的框架的用户为他们自己的(或任何)UIView 子类提供他们自己的扩展。
- 我还需要一些方法来允许可应用于所有 UIView 的通用行为作为后备选项(即,如果特定类扩展无法处理它,则使用通用 UIView 扩展)。
- 我还想通过提供一些内置的通用视图处理来分离我自己的实现,但这样做不会阻止第三方也定义他们自己的额外通用处理。 (如果我做不到,也没什么大不了的,前两部分是最重要的。)
我已经完成了第 1 部分。问题是如何实现这种回退行为。如果我用扩展来做这一切,子类将覆盖超类对协议方法的实现。它可以调用super.method,但我想避免把这个责任放在子类身上(以防作者忘记调用super)。
我想从框架代码中完成这一切:首先,调用对象的协议方法。如果它返回 false,我想以某种方式调用通用 UIView 处理程序。
现在我已经全部输入了,我想知道我是否可以为通用后备使用不同的方法并完成它。我只是想如果我能用一种方法来完成这一切会很优雅。
【问题讨论】:
-
例子?不知道你在追求什么。协议方法是一种协议方法。只要 Type 符合协议,有什么关系呢?该协议的全部目的是添加独立于 Type 的功能。另一方面,如果您要覆盖继承的实例或 Type 方法,那么它无论如何都与协议无关。 “打电话给对方”什么?
-
说协议定义了一种方法。我希望能够在 UIView 上提供两个扩展,每个都覆盖这个方法,但是如果一个失败(返回 false),我可以调用另一个。顺序不是很重要。
-
我猜这属于多重继承的范畴,可能不被支持。只是想我还是会问。我确信还有另一种方法可以解决它。