我有一个接收Set<NSObject>
的函数,我需要将该集迭代为Set<UITouch>
。我究竟如何测试并打开套装?
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches {
// ...
}
}
答案 0 :(得分:3)
通常,您会使用条件转换来检查每个元素
对于它的类型。但是在这里,touches
参数是
documented
如
一组
UITouch
个实例,代表正在移动的触摸 在由事件表示的事件期间。
因此你可以强制施放整个集合:
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches as! Set<UITouch> {
// ...
}
}
请注意,在Swift 2中,函数声明已更改为
func touchesMoved(_ touches: Set<UITouch>, withEvent event: UIEvent?)
(由于Objective-C中的“轻量级通用”),因此不再需要演员阵容。
答案 1 :(得分:2)
使用as运算符执行type casting:
for touch in touches {
if let aTouch = touch as? UITouch {
// do something with aTouch
} else {
// touch is not an UITouch
}
}