Метод motionEnded в Swift 2.0

Кажется, я не могу заставить методы обнаружения движения работать с Swift 2.0/Xcode 7. Получаемая ошибка указывает: "Метод не переопределяет ни один метод из своего суперкласса". Я хочу обнаружить различные движения, используя встроенные методы UIEvent.. т. Е. Встряхнуть. Вот что у меня внутри класса

    //this is used for detecting UIEvents i.e. 'Shake'
    override func canBecomeFirstResponder() -> Bool {
    return true
    }

....

    override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent)
    {
        if motion == .MotionShake && randomNumber == SHAKE
        {
            print("SHAKE RECEIVED")
            correctActionPerformed = true
        }
        else if motion == .MotionShake && randomNumber != SHAKE
        {
            print("WRONG ACTION")
            wrongActionPerformed = true
        }
         else
        {
            print("WRONG ACTION")
            wrongActionPerformed = true
        }
    }

Здесь возникла та же проблема: проблемы миграции Swift 2

2 ответа

Решение

Проблема здесь в том, что параметры были обновлены в Swift 2.0. Параметр UIEvent теперь является UIEvent?. Чтобы избежать этих проблем в будущем, если вы знаете, что функция должна быть переопределена, просто начните вводить "переопределить функцию", и автозаполнение XCode должно дать вам желаемую функцию.

Просто хотел добавить то же самое в Swift 3 iOS 10:

override var canBecomeFirstResponder: Bool {
    return true
}

override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
    if motion == .motionShake && randomNumber == SHAKE
    {
        debugPrint("SHAKE RECEIVED")
        correctActionPerformed = true
    }
    else if motion == .motionShake && randomNumber != SHAKE
    {
        debugPrint("WRONG ACTION")
        wrongActionPerformed = true
    }
    else
    {
        debugPrint("WRONG ACTION")
        wrongActionPerformed = true
    }
}
Другие вопросы по тегам