迭代NSObject设置为某种类型

时间:2015-07-12 08:04:34

标签: swift casting

我有一个接收Set<NSObject>的函数,我需要将该集迭代为Set<UITouch>。我究竟如何测试并打开套装?

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {

    for touch in touches {
        // ...
    }

}

2 个答案:

答案 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
    }
}