如何确定NSSet中的项目类型

时间:2010-06-24 03:06:42

标签: iphone objective-c

例如,方法:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
UIResponder中的

有一个NSSet* touches作为参数。

在方法本身中,如何确定实际包含的对象touches的类型?在这种情况下,它包含一组UITouch。但我从在线阅读一些教程就知道了。

一般来说,我怎么知道集合包含哪种对象?

3 个答案:

答案 0 :(得分:6)

正如Aran所说,您可以使用isKindOfClass:来确定NSSet中项目的类型。或者你可以询问任何给定的项目-class并走那条路。

但不要。

在整个Cocoa中,很少见到基于项目类改变行为的代码,而这些类不是软件设计过程的一部分。

因此,只要代码使用isKindOfClass:来处理集合中的各种项目,它几乎总是表示架构问题 - 几乎总是表明代码使用的是次优的模式或者与Cocoa不同。

答案 1 :(得分:0)

你可以询问集合中的对象是否是特定类型

if ([objectInSet isKindOfClass:[MyClass class]]) {
    [(MyClass *)cell myClassMethod];
}

但是因为NSSet是一组NSObject,它可以包含不同类型的对象(从NSObject派生),因此询问NSSet它包含哪种对象是没有意义的,因为它总是会告诉你NSObject。

答案 2 :(得分:0)

在标签中使用“touch”这个词是一个非常大的线索,它是一个UITouch,但如果你想明确知道一个方法的作用,那么显而易见的是检查documentation。让我们看看它为该方法所说的内容:

  

触摸

     

一组UITouch实例,表示在事件代表的事件期间移动的触摸。