面向协议的编程和附加属性的引入

时间:2016-09-22 12:04:22

标签: swift

几个月前我开始使用POP,我非常喜欢这个前提。尽管它允许我们这样做,但我觉得无法引入新属性真的让它变得瘫痪。我发现在现实世界的情况下,我经常需要引入一个或多个属性,扩展需要做它想要做的事情。最近的例子是:

我有UIView的扩展,呈现特殊的边框。我这样做是通过创建新的CALayer并将其添加为子层来查看。一切都运转良好,直到我注意到当视角的变化时,我被旧边框困住了。为了解决这个问题,我想将边框图层存储到属性中,当布局更改时,我将删除旧的边框图层并创建新的边框图层。但由于协议不能直接添加属性,我不得不使用子类。

我对如何处理上述情况并不感兴趣,因为我省略了一些可能导致您的改进无法使用的细节。我想知道这是否是我们必须忍受的东西,只是恢复到子类,或者我错过了某些东西,并且可以以某种方式克服它。

我知道协议可以定义实现它的类需要定义的属性,但这也是相当有限的。在上面的例子中,我想扩展UIView的功能,而不是UIView的某些子类,以便它可以在任何视图中使用

1 个答案:

答案 0 :(得分:-1)

我的厚颜无耻的回答:

面向协议的编程是一个穷人的OOP语言的多重继承,但没有得到它。

因此,如果您发现在层次结构中没有您需要的东西,只需制作另一个协议,并将必要的对象与其协调一致。

继承的构成?

或继承作文?

可能并不重要。

无论什么都有效。