为iPad构建点对点白板应用程序

网络可能很慢且不可靠。 不能保证以创建记录的顺序来接收EditRecord,也不能保证设备不会两次收到相同的EditRecord。 因此,EditRecords集必须具有以下属性:

  • 关联性: (A∪B)∪C=A∪(B∪C)联合操作的顺序必须无关紧要,以便可以以网络条件允许的任何顺序集成会话中其他设备的多组EditRecords。
  • 可交换性: A∪B=B∪A两个EditRecord集的并集操作的参数顺序不得影响结果值。
  • 幂等: A∪A= A重复的EditRecords必须能够被多次集成,而又不会导致所有记录的重复集中的那些记录出现重复,也不会导致计算出的Drawing中的信息出现重复。

保证严格的总订单

因为EditRecord符合Equatable和Hashable协议,所以EditRecord的集合自然会显示上述所有三个必需的属性。 但是,为了在所有设备上生成一致的图形,我们需要从EditRecords组中获取一个附加属性:总订单容量。

给定相同的EditRecords集,两个设备应该能够将这些EditRecords独立地排序为相同的顺序,以便在计算Drawing模型的过程中可以“重放”每个EditRecord包含的Edit,从而在两个设备上产生相同的Drawing。 我们从Helftone(Clear.app的开发人员)那儿取得了一页,并向EditRecord添加了几个属性,这些属性共同实现了实现总订单的能力。