下面的代码在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.
...但是我不知道该如何完成。
答案 0 :(得分:16)
正确的格式是:
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
的实例变量。
答案 1 :(得分:0)
对于那里的其他人,我正在构建(我认为是)独立于UI的类,并且没有导入UIKit。
什么都行不通,直到我在文件顶部添加以下内容:
#import UIKit
似乎某些通知(UIApplication,UIResponder等中的通知)可能已重构为UIKIt。
答案 2 :(得分:0)
所选的answer不完整,会产生编译器错误,
无法使用类型为参数的列表调用“ addObserver” '(RegistrationViewController,选择器:Selector,名称: NSNotification.Name)'
这是工作格式,
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)