Я работаю над приложением iOS, и я использую в этом быстрое использование. Для большей читаемости и организации функций я использовал расширения в моем быстром файле.Быстрый контроль доступа, вызывающий проблемы
// MARK: Class Declaration
class PaymentView
{
// Some stuffs
}
// MARK: Lifecycle methods
extension PaymentView
{
// Overriden for adding gesture recogniser
override func awakeFromNib()
{
super.awakeFromNib()
// Causes a crash when tapped on view
let tapGesture = UITapGestureRecognizer(target: self, action: Selector("paymentViewSelected:"))
self.addGestureRecognizer(tapGesture)
// Works correctly !!!
paymentViewSelected(tapGesture);
}
}
// MARK: Private Methods
extension PaymentView
{
private func paymentViewSelected(sender : UITapGestureRecognizer)
{
print("Method called")
}
}
Мой вопрос, когда я нажимаю на мой взгляд, сбои приложений с unrecognised selector
ошибки. Если я удалю этот спецификатор контроля доступа private
из метода, он отлично работает.
Мой вопрос, я могу позвонить paymentViewSelected:
непосредственно с awakeFromNib
независимо от private
. Но почему он сбой при использовании в качестве селектора?
Согласно Swift AccessControl Reference
Частному доступа ограничивает использование объекта для его собственного определяющего исходного файла. Используйте частный доступ, чтобы скрыть детали реализации определенной функциональности.
Но мой класс, расширение, жест все в одном файле. Я думаю, что здесь отсутствует базовая концепция. Пожалуйста, помогите мне разобраться в этом вопросе.
Кажется, вам просто нужно добавить '@ objc' в метод' private'. См. Http://stackoverflow.com/questions/25056278/swift-access-control-with-target-selectors – sbarow
@sbarow: Спасибо за ссылку, она решила проблему –