/ / Repetindo sobre NSObject definido como um determinado tipo - rápido, conversão

Itterating over NSObject set como um determinado tipo - swift, casting

Eu tenho uma função que recebe um Set<NSObject> e eu preciso percorrer o conjunto como um Set<UITouch>. Como exatamente testei isso e desembrulhei o conjunto?

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

for touch in touches {
// ...
}

}

Respostas:

2 para resposta № 1

Use o operador as para executar tipo de fundição:

for touch in touches {
if let aTouch = touch as? UITouch {
// do something with aTouch
} else {
// touch is not an UITouch
}
}

3 para resposta № 2

Geralmente você usaria uma conversão condicional para verificar cada elemento para o seu tipo. Mas aqui, o touches parâmetro é documentado Como

Um conjunto de UITouch instâncias que representam os toques que estão se movendo durante o evento representado por evento.

portanto, você pode forçar a conversão de todo o conjunto:

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

for touch in touches as! Set<UITouch> {
// ...
}

}

Observe que no Swift 2 a declaração da função mudou para

func touchesMoved(_ touches: Set<UITouch>, withEvent event: UIEvent?)

(devido aos "genéricos leves" no Objective-C) para que um elenco não seja mais necessário.