webentwicklung-frage-antwort-db.com.de

Fehler mit Benachrichtigungsnamen beim Konvertieren von Code nach Swift 4.2

Der folgende Code hat einwandfrei funktioniert, bevor Swift 4.2:

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

Wenn ich auf die Option "Korrigieren" klicke, wird Folgendes angezeigt:

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

Aber es ist immer noch ein Fehler markiert. Hier ist die Erklärung:

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

Und dann habe ich versucht, "UIResponder" zu löschen:

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

... aber ich weiß nicht, wie ich es vervollständigen soll.

6
mannyCalavera

Die richtige Form ist:

UIResponder.keyboardWillShowNotification

... so wird Ihr Code:

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

Dies ist ein bekanntes Problem mit Xcode 10. Automatische Korrektur - es funktioniert nicht richtig für Swift 4.2, wenn es um die Korrektur von Benachrichtigungsnamen geht.

In Swift 4.2, viele Notification.Name Instanzen wurden zu Instanzvariablen in anderen Klassen. Beispielsweise ist keyboardWillShowNotification jetzt eine Instanzvariable von UIResponder.

26
Tamás Sengel