I'm working on an iOS application and I'm using swift in that. For more readability and organising functions I've used extensions in my swift file.

```
// 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")
    }
}

```

My issue is when I tap on my view the application crashes with `unrecognised selector` error. If I remove that `private` access control specifier from the method it works perfectly.

My question is, I can call the `paymentViewSelected:` directly from the `awakeFromNib` regardless the `private`. But why it is crashing when used as a selector ?

According to [Swift AccessControl Reference](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html)

> 
> Private access restricts the use of an entity to its own defining
>  source file. Use private access to hide the implementation details of
>  a specific piece of functionality.
> 
> 
> 

But my class, extension, gesture all are in same file. I think I'm missing some basic key concept here. Please help me to understand the issue.