将代码转换为 Swift 4.2 时通知名称出错
Error with notification names while converting code to Swift 4.2
下面的代码在 Swift 4.2:
之前工作正常
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
当我点击'Fix'选项时,它变成:
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.
...但是我不知道该如何完成。
正确的形式是:
UIResponder.keyboardWillShowNotification
...因此,您的代码变为:
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillChange(notification:)),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
这是 Xcode 10 的一个已知问题。在更正通知名称时,Swift 4.2 的自动修复无法正常工作。
在 Swift 4.2 中,许多 Notification.Name
实例在其他 类 中成为实例变量。例如,keyboardWillShowNotification
现在是 UIResponder
.
的实例变量
对于那里的其他人,我正在构建(我认为是)UI-独立 class 并且没有导入 UIKit。
直到我在我的文件顶部添加这个:
import UIKit
似乎某些通知(UIApplication、UIResponder 等中的通知)可能已重构为 UIKIt。
选择的不完整并产生编译器错误,
Cannot invoke 'addObserver' with an argument list of type
'(RegistrationViewController, selector: Selector, name:
NSNotification.Name)'
这是工作格式,
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
下面的代码在 Swift 4.2:
之前工作正常NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
当我点击'Fix'选项时,它变成:
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.
...但是我不知道该如何完成。
正确的形式是:
UIResponder.keyboardWillShowNotification
...因此,您的代码变为:
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillChange(notification:)),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
这是 Xcode 10 的一个已知问题。在更正通知名称时,Swift 4.2 的自动修复无法正常工作。
在 Swift 4.2 中,许多 Notification.Name
实例在其他 类 中成为实例变量。例如,keyboardWillShowNotification
现在是 UIResponder
.
对于那里的其他人,我正在构建(我认为是)UI-独立 class 并且没有导入 UIKit。
直到我在我的文件顶部添加这个:
import UIKit
似乎某些通知(UIApplication、UIResponder 等中的通知)可能已重构为 UIKIt。
选择的
Cannot invoke 'addObserver' with an argument list of type '(RegistrationViewController, selector: Selector, name: NSNotification.Name)'
这是工作格式,
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)