2015-07-12 68 views
1

我有一個函數,它接收到Set<NSObject>,我需要遍歷集合作爲Set<UITouch>。我如何測試這個並解開這個集合?NSObject設置爲特定類型

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

    for touch in touches { 
     // ... 
    } 

} 

回答

2

使用的運營商進行type casting

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

通常你會使用條件鑄檢查每個元素 其類型。但在這裏,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中),以便不再需要演員。

+1

準確地說,在這種情況下,你可以「承受」一種力量。你的代碼將是安全的。 –