web-dev-qa-db-fra.com

Erreur avec les noms de notification lors de la conversion du code en Swift 4.2

Le code ci-dessous fonctionnait bien avant Swift 4.2:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

Lorsque je clique sur l'option 'Fix', cela devient:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIResponder.keyboardWillShowNotification, object: nil)

Mais il s'agit toujours d'une erreur. Voici l'explication:

Type 'NSNotification.Name' has no member 'UIResponder'

Et puis j'ai essayé de supprimer 'UIResponder':

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.

... mais je ne sais pas comment le compléter.

6
mannyCalavera

La forme correcte est:

UIResponder.keyboardWillShowNotification

... alors, votre code devient:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification)

Il s'agit d'un problème connu avec Xcode 10. Le correctif automatique ne fonctionne pas correctement pour Swift 4.2 lorsqu'il s'agit de corriger les noms des notifications.

Dans Swift 4.2, beaucoup de Notification.Name les instances sont devenues des variables d'instance dans d'autres classes. Par exemple, keyboardWillShowNotification est maintenant une variable d'instance de UIResponder.

26
Tamás Sengel