Cocoa touch 为什么是一套UITouch?

Cocoa touch 为什么是一套UITouch?,cocoa-touch,Cocoa Touch,我只是好奇为什么UIResponder方法返回一组UITouch对象,而不仅仅是一个数组 override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) 覆盖功能触摸移动(触摸:设置,带事件:UIEvent?) 我不能完全理解它的好处是什么,或者背后的目的是什么。希望有人能解释一下背景中发生了什么,以及我最终如何用一套UITouch来结束。例如,如果我在屏幕上拖动两个手指,那不是一个UITo

我只是好奇为什么UIResponder方法返回一组UITouch对象,而不仅仅是一个数组

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
覆盖功能触摸移动(触摸:设置,带事件:UIEvent?)

我不能完全理解它的好处是什么,或者背后的目的是什么。希望有人能解释一下背景中发生了什么,以及我最终如何用一套UITouch来结束。例如,如果我在屏幕上拖动两个手指,那不是一个UITouch对象数组吗?

我们大多数人只能猜测为什么UIKit报告的是一个集合而不是一个数组

这是我的猜测:它强调触摸没有任何特定的顺序,并且从一个事件到下一个事件的顺序可能不相同。由于
Set
NSSet
没有下标运算符,因此在处理以后的事件时很难犯存储触摸索引(0、1、2等)的错误

它也可能是一个实现细节。UIKit仅以60 Hz(在大多数设备上)向应用程序报告触摸事件,并与屏幕刷新同步。如果硬件支持报告频率超过60 Hz的触摸事件,UIKit需要为同一触摸合并多个事件。从某种意义上说,如果UIKit将更新的触摸存储为集合而不是数组,则这种合并会自动发生。

“集合”和“数组”都是集合对象,因此是的,所有触摸都可以在其中一个或字典中返回。我想,苹果选择退货的原因有两个:

  • 触摸是独一无二的。数组中的对象可以多次出现,但不能出现在一个集合中。因为每一次触摸只是一次触摸,所以它们在一组中更有意义
  • 触摸是无序的。数组中的对象是有序的,而在集合中则不是。您将如何确定触摸的顺序?哪一个可能发生得更早?或是最左边的,或是最坚固的,等等。。。没有自然正确的顺序,所以它们是无序的,因此最适合于一个集合

  • “为什么”的问题往往是基于观点的。特别是,你会问,为什么苹果选择以某种方式设计产品,而他们往往不会就此发表官方声明。因此,你不会得到一个权威的答案,而社区能提供的唯一答案是“如果我设计它,我会这样做,因为……”,这是基于观点的。我必须编辑和重新措辞,我想我真正想问的是当我得到一组答案时到底发生了什么。我仍然不清楚你的问题。使用一组UITouch对象调用该方法,这些对象表示已移动的触摸(对于多点触摸,两个或多个)。触摸之间没有顺序,这要求它们存储在一个数组中。连接到视图的手势识别器没有顺序,但是
    gesturecognitioners
    属性是一个数组而不是一个集合。当UIKit中的其他集合可以设置为数组时,我们有理由问为什么UIKit设计者选择使用集合而不是数组进行触摸(既作为消息参数,也作为
    UIEvent
    alltouchs
    属性)。我同意答案(包括我的)对这个问题的回答很可能是基于意见的。