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

Swift 面向协议的编程和附加属性的引入,swift,Swift,我几个月前开始使用流行音乐,我真的很喜欢这个前提。尽管它允许我们这么做,但我觉得不能引进新的房地产确实会削弱它。我发现在现实世界中,我经常需要引入一个或多个属性,扩展需要这样做。最近的例子是: 我对UIView进行了扩展,它呈现了一种特殊的边界。我通过创建新的CALayer并将其添加为要查看的子层来实现这一点。一切都很顺利,直到我注意到当视图的边界改变时,我被旧边界卡住了。为了解决这个问题,我想将边界层存储到属性中,当布局更改时,我会删除旧的边界层并创建新的边界层。但由于协议不能直接添加属性,所

我几个月前开始使用流行音乐,我真的很喜欢这个前提。尽管它允许我们这么做,但我觉得不能引进新的房地产确实会削弱它。我发现在现实世界中,我经常需要引入一个或多个属性,扩展需要这样做。最近的例子是:

我对UIView进行了扩展,它呈现了一种特殊的边界。我通过创建新的CALayer并将其添加为要查看的子层来实现这一点。一切都很顺利,直到我注意到当视图的边界改变时,我被旧边界卡住了。为了解决这个问题,我想将边界层存储到属性中,当布局更改时,我会删除旧的边界层并创建新的边界层。但由于协议不能直接添加属性,所以我不得不使用子类

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

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

面向协议的编程是一个穷人对OOP语言的多重继承,而OOP语言却没有

因此,如果您发现您的层次结构中没有您需要的东西,只需制定另一个协议,并使必要的对象符合它

组成重于继承

还是遗传成分

可能根本没关系

)()

只要行得通。

我厚颜无耻的回答:

面向协议的编程是一个穷人对OOP语言的多重继承,而OOP语言却没有

因此,如果您发现您的层次结构中没有您需要的东西,只需制定另一个协议,并使必要的对象符合它

组成重于继承

还是遗传成分

可能根本没关系

)()


无论什么都有效。

我认为没有人知道如何描述如何/何时/何地/如何使用协议,而不会尴尬地避免冲突。唯一能很好表达的理由是“为什么”。这是关于可读性、灵活性、易用性、易创建性、可维护性等的虚假声明。所有模糊的声明都适用于自。。。永远。这在理论上很好,但也只是在理论上得到了解释。最重要的是,苹果在斯威夫特问题上没有吃自己的狗粮。还记得当时的反应吗?当时发现几乎没有苹果的应用程序是用Swift制作的,但他们却在为其他人宣传它?我认为,与他们的硬件周期相反,苹果关于软件的任何声明都应该等待2到3代人才能被认为是合法的。他们不会对他们的新硬件的能力窃窃私语,直到它发布和证明。这项政策不适用于软件和框架,因为它们宣称这些软件和框架的目的是为了获得应用。它们被烧焦了,真的吗?我认为swift比“几乎没有应用程序是用swift制作的”更受欢迎。我只是不认为使用obj-c有什么意义,除非你真的必须这么做。我在1.3左右切换到swift,我从不后悔这个决定。我甚至回到过去,将一些旧的应用程序重写为纯(好吧,尽可能纯)swift。现在,当我真的需要回到在obj-c中完成的旧项目时,我对我的faceTL感到厌恶;DR-坚持OOP和MVC,直到苹果积极证明POP的流程、性能和实用性,他们在漂亮的游行和完美包装的演示中如此夸耀地宣称,协议的潜力和作为应用程序编程范例的前景。我不是建议Obj-C,我建议使用Swift,因为它适合UIKit和现在的苹果框架,而不是POP作为范例的潜力或承诺,也不是针对未来。我认为没有人知道如何描述如何/何时/何地/使用协议,而不会尴尬地避免冲突。唯一能很好表达的理由是“为什么”。这是关于可读性、灵活性、易用性、易创建性、可维护性等的虚假声明。所有模糊的声明都适用于自。。。永远。这在理论上很好,但也只是在理论上得到了解释。最重要的是,苹果在斯威夫特问题上没有吃自己的狗粮。还记得当时的反应吗?当时发现几乎没有苹果的应用程序是用Swift制作的,但他们却在为其他人宣传它?我认为,与他们的硬件周期相反,苹果关于软件的任何声明都应该等待2到3代人才能被认为是合法的。他们不会对他们的新硬件的能力窃窃私语,直到它发布和证明。这项政策不适用于软件和框架,因为它们宣称这些软件和框架的目的是为了获得应用。它们被烧焦了,真的吗?我认为swift比“几乎没有应用程序是用swift制作的”更受欢迎。我只是不认为使用obj-c有什么意义,除非你真的必须这么做。我在1.3左右切换到swift,我从不后悔这个决定。我甚至回到过去,将一些旧的应用程序重写为纯(好吧,尽可能纯)swift。现在,当我真的需要回到在obj-c中完成的旧项目时,我对我的faceTL感到厌恶;DR-坚持OOP和MVC,直到苹果积极证明POP的流程、性能和实用性,他们在漂亮的游行和完美包装的演示中如此夸耀地宣称协议的潜力和作为应用程序编程范例的前景。我不是建议Obj-C,我是建议