我了解结构体和类(以及协议)的基本工作原理。我有一个相当常见的情况:
我需要具有运算符的通用值类型,这些值类型在分配时确实必须进行复制。 这些类型具有复杂的结构,我希望能够通过子类专门化,否则将在各处复制代码,并且这将是糟糕的编程。
我尝试过协议和扩展,但由于协议不是通用的,因此我无法定义我想要的(通用)运算符。 如果我使用类,则不会在分配时进行复制。
今天的例子是我有Matrix,其中包含SquareMatrix和特定的方阵函数。有运算符,矩阵可以由符合我的环协议的任何内容填充。我尝试在关联类型协议中定义几乎所有功能,并进行扩展。
编辑:我真的想知道我应该编写什么代码。在矩阵情况下,我需要能够像其他任何东西一样传递方阵,因此子类化是唯一的选择吗?也许我错了。主要问题是当我必须编写涉及内部值的函数时,我必须知道通用类型参数才能做任何有用的事情。例如,在定义加法时,我必须创建一个新矩阵并声明其通用类型,但是当我只知道某些东西是(非通用)协议时,我从哪里获取它?它的真实类型是通用的,尽管协议具有此关联类型,但我无法将其取出。 解决方案感谢亚历山大·莫姆克利奥夫。基本上需要更多的工作将代码完全移入协议扩展中,并为所有相关类型使用'Self'。在扩展中,编译器对通用类型很满意。
代码是私有的,很抱歉我无法在这个问题中粘贴任何内容。感谢您的耐心和帮助。
我需要具有运算符的通用值类型,这些值类型在分配时确实必须进行复制。 这些类型具有复杂的结构,我希望能够通过子类专门化,否则将在各处复制代码,并且这将是糟糕的编程。
我尝试过协议和扩展,但由于协议不是通用的,因此我无法定义我想要的(通用)运算符。 如果我使用类,则不会在分配时进行复制。
今天的例子是我有Matrix,其中包含SquareMatrix和特定的方阵函数。有运算符,矩阵可以由符合我的环协议的任何内容填充。我尝试在关联类型协议中定义几乎所有功能,并进行扩展。
编辑:我真的想知道我应该编写什么代码。在矩阵情况下,我需要能够像其他任何东西一样传递方阵,因此子类化是唯一的选择吗?也许我错了。主要问题是当我必须编写涉及内部值的函数时,我必须知道通用类型参数才能做任何有用的事情。例如,在定义加法时,我必须创建一个新矩阵并声明其通用类型,但是当我只知道某些东西是(非通用)协议时,我从哪里获取它?它的真实类型是通用的,尽管协议具有此关联类型,但我无法将其取出。 解决方案感谢亚历山大·莫姆克利奥夫。基本上需要更多的工作将代码完全移入协议扩展中,并为所有相关类型使用'Self'。在扩展中,编译器对通用类型很满意。
代码是私有的,很抱歉我无法在这个问题中粘贴任何内容。感谢您的耐心和帮助。