'Set<NSObject>' does not have a member named 'anyObject." - Xcode 6.3

Willie picture Willie · Apr 12, 2015 · Viewed 10.3k times · Source

I'm checking to see if an element has been selected.

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
{
    // First, see if the game is in a paused state
    if !gamePaused
    {
        // Declare the touched symbol and its location on the screen
        let touch = touches.anyObject! as? UITouch
        let location = touch.locationInNode(symbolsLayer)

And this had previously compiled fine in Xcode 6.2 but with a 6.3 update, the line "let touch = touches.anyObject! as? UITouch" is throwing the error:

'Set' does not have a member named 'anyObject'

I've read through many similar question, but I can't seem to wrap my head around "To use the value, you need to “unwrap” it first." Especially because the answers seem to focus on notifications.

Thank you so much. W

Answer

Weihong Chen picture Weihong Chen · Apr 12, 2015
let touch =  touches.first as? UITouch

.first can allow you to access first object of UITouch.

Since Xcode 6.3 uses an updated version of Swift (1.2) you need to convert your old code into Swift 1.2 (Edit -> convert -> To lastest Swift).

Swift 1.2, uses Set’s (new in Swift) instead of using NSSet’s (old one in Objective-C). Thus the touchbegan function also changes its parameters from NSSet to Set.

For more info, refer this