例如,方法:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
UIResponder
中的有一个NSSet* touches
作为参数。
在方法本身中,如何确定实际包含的对象touches
的类型?在这种情况下,它包含一组UITouch
。但我从在线阅读一些教程就知道了。
一般来说,我怎么知道集合包含哪种对象?
答案 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实例,表示在事件代表的事件期间移动的触摸。