Search code examples
iosswifttouchesbegantouchesmoved

Set<UITouch> not working in iOS Swift game


I am making a game similar to Fruit Ninja using Swift 2.0 in Xcode v7.0. However, in the touchesBegan, touchesMoved, and touchesCancelled override functions, I am getting the three following errors:

"Value of type 'Set' has no member 'anyObject'" comes up twice and "Value of optional type 'Set' not unwrapped; did you mean to use "!" or "?"?" comes once.

Here is the code

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch = touches.anyObject() as UITouch
    let location = touch.locationInNode(self)

    activeSlicePoints.append(location)
    redrawActiveSlice()

    activeSliceBG.removeAllActions()
    activeSliceFG.removeAllActions()

    activeSliceBG.alpha = 1
    activeSliceFG.alpha = 1

}

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch = touches.anyObject() as UITouch
    let location = touch.locationInNode(self)

    activeSlicePoints.append(location)
    redrawActiveSlice()

}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    activeSliceBG.runAction(SKAction.fadeOutWithDuration(0.25))
    activeSliceFG.runAction(SKAction.fadeOutWithDuration(0.25))

}

override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
    touchesEnded(touches, withEvent: event)
}

Here is an image of on what lines the errors appear

All help appreciated. Thanks in advance.


Solution

  • let touch =  touches.first as? UITouch
    

    This will get you the first touch object.

    Use it like:

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if let touch = touches.first {
            // ...
        }
        super.touchesBegan(touches, withEvent:event)
    }