Ошибка с именами уведомлений при преобразовании кода в Swift 4.2 - PullRequest
0 голосов
/ 23 сентября 2018

Код ниже работал нормально до 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.

... но я не знаю, как мне его завершить.

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Для кого-то другого я создавал (то, что я думал, был) независимый от UI класс и не импортировал UIKit.

Ничего не работало, пока я не добавил в начало моего файла, это:

#import UIKit

Похоже, что некоторые уведомления (в UIApplication, UIResponder и т. Д.) Могли быть реорганизованы в UIKIt.

0 голосов
/ 23 сентября 2018

Правильная форма:

UIResponder.keyboardWillShowNotification

... так, ваш код становится:

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

Это известная проблема с Xcode 10. Автоматическое исправление - это неработает корректно для Swift 4.2, когда дело доходит до исправления имен уведомлений.

В Swift 4.2 множество экземпляров Notification.Name стали переменными экземпляра в других классах.Например, keyboardWillShowNotification теперь является переменной экземпляра UIResponder.

...