gpt4 book ai didi

swift - 面向协议(protocol)的编程和附加属性的引入

转载 作者:搜寻专家 更新时间:2023-11-01 05:43:56 24 4
gpt4 key购买 nike

几个月前我开始使用 POP,我非常喜欢这个前提。尽管它允许我们做所有事情,但我觉得无法引入新属性确实削弱了它。我发现在现实世界的情况下,我经常需要引入一个或多个属性,扩展需要这些属性来完成它的预期任务。最近的例子是这样的:

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

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

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

最佳答案

我厚颜无耻的回答:

面向协议(protocol)编程是一种穷人对不了解它的 OOP 语言的多重继承。

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

组合优于继承?

还是继承组合?

可能根本不重要。

;)

任何有效。

关于swift - 面向协议(protocol)的编程和附加属性的引入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com