我来自OOP的背景,试图找出通常我会使用抽象类的东西的最佳设计,这是Swift中不存在的概念。我的程序包括许多不同的处理音频的技术,我称之为效果。除了该效果特有的属性(例如效果链中的不同处理单元)外,每个效果都有几种常用的存储属性(例如输出混合器和开/关布尔值)。每个效果还具有许多共同的功能,这些功能大多使用其共同的属性,而一个功能(截至目前)使用其独特的属性。由于我不能使用抽象类来提供可用功能/默认实现的列表以及它们所利用的存储属性的声明,并且Swift不允许在协议扩展中使用存储的属性,因此我无法找出最佳的设计方法。
我遇到了几种可能的解决方法,包括在协议扩展中包括存储的属性(例如使用objc_getAssociatedObject和objc_setAssociatedObject,或者引用包含所有属性及其默认值的结构,因此它成为“计算的”而不是“存储的”),但是,这些听起来都不是最佳设计或最佳实践。我想知道,经验丰富的Swift程序员将如何使用其通用功能和存储的属性来设计我的效果?有什么我想念的吗?从我的研究看来,Swift中的几乎所有东西都可以(而且应该)使用POP而不是OOP来完成,所以我觉得使用通用的超类作为带有一些未实现功能的伪抽象类并不理想。
我之前已经读过this question,并且知道Swift中没有抽象类。我更加想知道哪种方法最适合我的情况,尤其是抽象公共存储属性,因为使用协议和扩展是不可能的。