2016-05-24 4 views
0

У меня есть протоколИспользование #selector директивы в Xcode 7.3

protocol AnnotationTapDelegate: AnyObject { 

    /* Delegate to identify the tap on Annotation view */ 
    func didTapAnnotation(sender: UITapGestureRecognizer) 
} 

и класс

class CustomAnnotationView: MKAnnotationView { 
    func setTapDelegate(delegate: AnnotationTapDelegate!) { 
     let tapGesture = UITapGestureRecognizer(target: delegate, action: #selector(AnnotationTapDelegate.didTapAnnotation(_:))) <== Error 
     self.addGestureRecognizer(tapGesture) 
    } 
} 

, который дает мне компилировать ошибку говоря «Аргумент„#selector“относится к способу, который не отображается в Objective-C "и дает предложение" Добавить "@ obj-c ', чтобы разоблачить это Objective-C". После добавления '@ obj-c', я получаю ту же ошибку и снова добавляется '@ obj-c'. Проблема не решена.

Я работаю в Xcode 7.3.1.

Раньше я был

let tapGesture = UITapGestureRecognizer(target: delegate, action: "didTapAnnotation:") 

, который работает отлично. После обновления моего Xcode до 7.3.1 я столкнулся с этой проблемой.

Как установить функцию протокола в качестве селектора?

ответ

2

Вам необходимо добавить @objc на уровне протокола.

@objc 
protocol AnnotationTapDelegate: AnyObject { 

    /* Delegate to identify the tap on Annotation view */ 
    func didTapAnnotation(sender: UITapGestureRecognizer) 
} 
+0

Спасибо! Оно работает. – iOS

+0

Ваш прием :) –

+0

Фактически '@ obj-c' был добавлен в func. Добавление его в протокол работает. – iOS

Смежные вопросы