Swift特定通知观察器初始化

时间:2017-08-23 08:42:29

标签: swift xcode swift3

在尝试使用新的Swift NotificationCenter时,我试图将观察者对象创建为属性(与将观察者分配给自己的经典Obj-C模式相反):

private let keyboardWillShowObserver = {
    return NotificationCenter.default.addObserver(forName: .UIKeyboardWillShow, object: nil, queue: nil, using: self.keyboardWillShow(_:))
}()

private func keyboardWillShow(_ notification: Notification) {
    bottomVerticalSpaceConstraint.constant = 400
}

问题是我收到以下错误消息,即使我有同一个类的成员函数部分:

  

类型的值'(NSObject) - > () - > MyAwesomeViewController'没有成员'keyboardWillShow'

2 个答案:

答案 0 :(得分:1)

HomeViewController是你的viewController

  private let keyboardWillShowObserver = {
        return NotificationCenter.default.addObserver(forName: .UIKeyboardWillShow, object: nil, queue: nil, using: { (Notification) in
            HomeViewController.keyboardWillShow (Notification)
        })

    }()

     static func keyboardWillShow(_ notification: Notification) {
       // bottomVerticalSpaceConstraint.constant = 400
    }

答案 1 :(得分:1)

由于keyboardWillShowObserver不是懒惰的,因此在MyAwesomeViewController的实例初始化期间将执行它的闭包。据我了解,这意味着self将被解释为MyAwesomeViewController类,而不是类的实例。

有一种简单的方法可以解决这个错误:make private lazy var keyboardWillShowObserver所以闭包将在之后的实例上执行,它将被完全初始化。