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 № 1Use 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.