web-dev-qa-db-ja.com

コードをSwift 4.2に変換する際の通知名のエラー

以下のコードは、Swift 4.2:

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

「修正」オプションをクリックすると、次のようになります。

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

ただし、まだエラーとしてマークされています。説明は次のとおりです。

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

そして、私は「UIResponder」を削除しようとしました:

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

...しかし、私はそれをどのように完了する必要があるのか​​わかりません。

6
mannyCalavera

正しい形式は次のとおりです。

UIResponder.keyboardWillShowNotification

...そのため、コードは次のようになります。

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

これはXcode 10の既知の問題です。通知名の修正に関しては、Swift 4.2では自動修正が正しく機能していません。

Swift 4.2、たくさんのNotification.Nameインスタンスは、他のクラスのインスタンス変数になりました。たとえば、keyboardWillShowNotificationUIResponderのインスタンス変数になりました。

26
Tamás Sengel