swift – Subclass a Struct或Similar
我理解结构和类(和协议)如何在基本级别上工作.我有一个相当常见的情况:
我需要使用运算符的泛型值类型,它们必须在赋值时复制. 我已经尝试过协议和扩展但是因为协议不是通用的我无法定义我想要的(通用)运算符. 今天的例子是我有Matrix和SquareMatrix,具有特定的方矩阵功能.有些运算符和矩阵可以由符合我的环协议的任何东西填充.我尝试使用关联类型和扩展来定义协议中的几乎所有功能. 编辑:我真的很想知道我应该编码什么.在矩阵情况下,我需要能够像任何其他矩阵一样传递方矩阵,所以子类化是唯一的选择吗?也许我错了.主要问题是当我必须编写一个讨论内部值的函数时,我必须知道泛型类型参数来做任何有用的事情.例如,当定义添加时,我必须创建一个新的矩阵并声明它的泛型类型,但是当我只知道某个(非泛型)协议时,我从哪里得到它 – 它的真实类型是通用的但是尽管协议具有这种关联类型,我没办法把它拿出来. 解决方案感谢alexander momchliov.基本上需要更多的工作来将代码完全移动到协议扩展中,并对所有相关类型使用“Self”.在扩展中,编译器对泛型类型的内容感到满意. 代码是私密的,很抱歉,我无法在此问题中粘贴任何内容.感谢您的耐心和帮助. 解决方法
结构继承/多态性至少有两个原因是不可能的(我能想到).
>结构按值存储和移动.这要求编译器在编译时知道结构的确切大小,以便知道在结构实例启动后要复制多少字节. 假设有一个结构A和一个继承自A的结构B.只要编译器看到类型A的变量,它就无法确定运行时类型是否真的是A,或者是否使用了B.如果B添加了A没有的新存储属性,则B的大小将与A不同(大于).编译器将无法确定运行时类型以及这些结构的大小. 由于这些原因,协议在Swift中发挥了重要作用,因为它们允许您引入类似继承的行为,而不会出现这些问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |