Type 'NSObject' does not have a member copy '

I just upgraded to Xcode 8 and now I get an error in my project

The type "NSObject" does not have a "copy" of the member.

Before upgrading Xcode, I did not get this error.

Note: I am still using Swift 2.3. I have subclassed UILabel so that I can let the user copy the text from the shortcut on long press. Below is my code. Error on line:

if action == #selector(NSObject.copy(_:))

Here is the complete code:

class MCCopyableLabel: UILabel {

  override init(frame: CGRect) {
    super.init(frame: frame)
    sharedInit()
  }

  required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
    sharedInit()
  }

  func sharedInit() {
    userInteractionEnabled = true
    addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(MCCopyableLabel.showMenu(_:))))
  }

  func showMenu(sender: AnyObject?) {
    becomeFirstResponder()
    let menu = UIMenuController.sharedMenuController()
    if !menu.menuVisible {
      menu.setTargetRect(bounds, inView: self)
      menu.setMenuVisible(true, animated: true)
    }
  }

  override func copy(sender: AnyObject?) {
    let board = UIPasteboard.generalPasteboard()
    board.string = text
    let menu = UIMenuController.sharedMenuController()
    menu.setMenuVisible(false, animated: true)
  }

  override func canBecomeFirstResponder() -> Bool {
    return true
  }

  override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
    if action == #selector(NSObject.copy(_:)) {
      return true
    }
    return false
  }
}
+4
source share
4 answers

'NSObject' Swift 2.2 Swift 3, , .

Swift 2

#selector(NSObject.paste(_:))

Swift 3

#selector(paste(_:))
+3

copy , :

#selector(NSObject.copy)

#selector(NSObject.copy(_:)) .

+2

.

#selector(UIResponderStandardEditActions.copy(_:))
+2

#selector(UILabel.copy(_:))
0

Source: https://habr.com/ru/post/1654820/


All Articles