Использование правильного синтаксиса TapGestureRecognizer

#swift #segue #xcode8 #uitapgesturerecognizer

#swift #segue #xcode8 #uitapgesturerecognizer

Вопрос:

Кто-нибудь может мне помочь с этой ошибкой? Не уверен, о чем он просит…

Синтаксис TapGestureRecognizer

     override func viewDidLoad() {
    super.viewDidLoad()

    let tapStart = UITapGestureRecognizer(target: self, action:#selector(tapped(gesture:)))
    self.view.addGestureRecognizer(tapStart)

    func tapped(gesture: UITapGestureRecognizer){
        print("It actually worked")
    }
}
  

моя конечная цель, кажется, должна быть довольно простой:

Я хочу перейти к другому представлению, когда пользователь нажимает в любом месте экрана. Я создаю TapGestureRecognizer и сейчас просто печатаю в журналах в качестве метода, чтобы я мог легко увидеть, работает ли это.

Спасибо!

Комментарии:

1. Вам нужно скопировать и вставить код в свои вопросы. Изображения кода здесь не годятся. Читатели не хотят переходить по ссылкам. Они хотят скопировать и вставить ваш код. Они хотят отредактировать ваш код. Внешние изображения вдвойне бесполезны, поскольку они могут исчезнуть в любой момент и не помогут будущим читателям.

2. О! Теперь я знаю : P

3. проверьте мой ответ, в нем будет объяснено, как автоматически исправить синтаксическую ошибку…

Ответ №1:

Попробуйте использовать #selector(tapped(gesture:)) , если вы используете Swift 3. Если вы используете Swift 2, селектор, вероятно, будет tapped(_:) или что-то в этом роде.

Компилятор гарантирует существование символа, на который вы ссылаетесь при использовании #selector . Если вы используете строку и позволяете компилятору создать селектор из строкового литерала, все, что вы получаете, это предупреждение, подобное этому. Тот же недостаток касается использования Selector("funcname") конструктора.

Комментарии:

1. Я бы все равно начал с ‘action’?

2. ДА. action: это имя параметра, которое является частью UITapGestureRecognizer конструктора.

3. например, это — действие: #селектор(нажат (жест:)) .

4. Теперь это ошибка, указывающая: «использование локальной переменной ‘tapped(жест:)’ перед ее объявлением». Должен ли я объявлять новую функцию ‘tapped’ в другом месте, кроме того, что я делаю чуть ниже? (Как на изображении выше)

5. Короткий ответ, нет. Нет необходимости перемещать его. Посчитайте свои круглые скобки. Создайте свой проект. Если проблема не устранена, вам нужно показать больше вашего кода.

Ответ №2:

Попробуйте этот код: Протестирован в Swift 3

Примечание: Синтаксис изменен в Swift 3.

Вы можете автоматически исправить, удерживая function control option command f на клавиатуре, тогда Xcode исправит проблему за вас.

В вашем коде нет ничего плохого.Точно так же, как вы его используете.Вам следует размещать свой код следующим образом…

 override func viewDidLoad() {
    super.viewDidLoad()

    let tapStart = UITapGestureRecognizer(target: self, action:#selector(tapped(gesture:)))
    self.view.addGestureRecognizer(tapStart)   
    }
    func tapped(gesture: UITapGestureRecognizer){ // func tapped(_:) this will works to
        print("Your in Right track mate")
    }
  

Комментарии:

1. Спасибо, Джо! Я обнаружил, что проблема в моем случае заключалась в использовании локальной функции (tapped), когда она должна была находиться за пределами viewDidLoad () 🙂