Набор спрайтов Xcode 6 - SourceKitService прекращен

Я получил SourceKitService прекращено, когда я реализую этот метод:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!)

если я удалю !, оно работает. Но тогда я получил ошибку в моем коде, конечно. Полный код:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {

    for touch: AnyObject in touches {

        let location = touch.locationInNode(self)

        if nodeAtPoint(location).name == "plane" {
            println("plane touched")
        }
    }
}

2 ответа

Эта ошибка случилась и со мной. Я решил это сейчас, сначала преобразовав NSSet в NSArray, а затем воспользовавшись циклом for..in. Это не сбой:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {

        super.touchesBegan(touches, withEvent: event)

        let touchArray: NSArray = touches.allObjects

        for element in touchArray {
            println("\(element)")
        }

    }

Запуск на бета4, и я смог объявить метод без проблем. for touch: AnyObject in touches { похоже, проблема, так как, когда я заменяю AnyObject с UITouch, что более конкретно к тому, что вы хотите получить, я получаю ошибку компилятора: NSSet! cannot be implicitly downcast to UITouch, что означает, что синтаксис пытается привести массив к типу. Казалось бы, кастовать предмет пока невозможно. См. Ошибка аннотации в Swift для цикла с массивом и UIView. Вот тот же код тела без ошибок компилятора:

for item in touches {

    let location = (item as UITouch).locationInNode(self)    

    if self.nodeAtPoint(location).name == "plane" {
        println("plane touched")
    }

}

Ошибок было недостаточно, чтобы вызвать сбой SourceKit для меня. Может быть, у вас есть другие проблемные области в коде?

Другие вопросы по тегам