2016-09-22 24 views
1

我几个月前开始使用POP,我非常喜欢前提。尽管它使我们能够做到这一点,但我觉得无法引入新的属性真的会削弱它。我发现,在现实世界中,我经常需要引入一个或多个扩展需要做的事情的属性。最近的例子是这样的:面向协议的编程和附加属性的引入

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

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

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

+0

我不认为有人知道如何描述如何/何时/何地/如何使用协议,以避免尴尬避免冲突。唯一的理由(为了使用)就是“为什么”。这一直是可读性,灵活性,易用性和创造性,可维护性等虚假声明。所有模糊的声明适用于每一个新的编程范例,因为......永远。理论上很好,但它只是在理论上解释过。 – Confused

+0

最重要的是,当涉及到Swift时,苹果公司一直没有吃它自己的狗粮。记住这个答案时,几乎没有发现苹果应用是用Swift制作的,但是他们正在为其他人讲道吗?我认为,与他们的硬件周期相反,苹果对软件的任何主张都应该等待2到3代才能被认为是合法的。在发布和证明之前,他们不会对他们的新硬件的能力进行耳语。这项政策不适用于软件和框架,它们宣称希望获得应用。他们被烧了。 – Confused

+0

真的吗?我认为迅捷比“几乎没有快速制作的应用程序”更受欢迎。除非你真的需要,否则我只是没有看到使用obj-c的一点。我做了一个转换,在1.3左右快速转换,并且决不会后悔。我甚至回去重写了一些较旧的应用程序,以纯粹的方式(尽可能纯净)迅速。现在,当我确实需要回到obj-c完成的旧项目时,我在脸上做了恶心 – Lope

回答

-1

我的厚脸皮回答:

协议的程序设计是一个穷人的一个多重继承OOP语言,它没有得到它。

所以,如果你发现你的层次结构中没有你需要的东西,那么只需制作另一个协议,并将必要的对象符合它。

继承的构成?

还是继承构图?

也许没关系。

;)

无论什么作品。