Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 381
Willie Avatar asked Apr 11 '15 23:04

Willie


2 Answers

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

like image 101
Weihong Chen Avatar answered Nov 02 '22 12:11

Weihong Chen


This would check for multiple touches in symbolsLayer

override 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
        for touch: AnyObject in touches {
            let location = (touch as! UITouch).locationInNode(symbolsLayer)
        }
    }
}
like image 3
martin meincke Avatar answered Nov 02 '22 13:11

martin meincke