我有一個函數,它接收到Set<NSObject>
,我需要遍歷集合作爲Set<UITouch>
。我如何測試這個並解開這個集合?NSObject設置爲特定類型
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches {
// ...
}
}
我有一個函數,它接收到Set<NSObject>
,我需要遍歷集合作爲Set<UITouch>
。我如何測試這個並解開這個集合?NSObject設置爲特定類型
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches {
// ...
}
}
使用的運營商進行type casting:
for touch in touches {
if let aTouch = touch as? UITouch {
// do something with aTouch
} else {
// touch is not an UITouch
}
}
通常你會使用條件鑄檢查每個元素 其類型。但在這裏,touches
參數是 documented 作爲
一組
UITouch
實例表示由事件代表的事件期間移動 的觸摸。
因此您可以強制鑄造整套:
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
for touch in touches as! Set<UITouch> {
// ...
}
}
注意,在斯威夫特2函數聲明改爲
func touchesMoved(_ touches: Set<UITouch>, withEvent event: UIEvent?)
(由於「輕量仿製藥」在Objective-C中),以便不再需要演員。
準確地說,在這種情況下,你可以「承受」一種力量。你的代碼將是安全的。 –