在 Swift 3 中添加观察者和选择器

Posted

技术标签:

【中文标题】在 Swift 3 中添加观察者和选择器【英文标题】:Add Observer and Selector in Swift 3 【发布时间】:2017-01-29 02:47:25 【问题描述】:

我真的很难理解观察者的新语法。

你能帮我把它翻译成 Swift 3。

nc.addObserver(self, selector: #selector(MapViewController.locationUpdated(_:)), name: LocationNotification.kLocationUpdated, object: nil)
nc.addObserver(self, selector: #selector(MapViewController.locationAuthorizationStatusChanged(_:)), name: LocationNotification.kAuthorizationStatusChanged, object: nil)
nc.addObserver(self, selector: #selector(MapViewController.locationManagerDidFailWithError(_:)), name: LocationNotification.kLocationManagerDidFailWithError, object: nil)

非常感谢!

【问题讨论】:

【参考方案1】:

记得将接受通知的方法公开(如果它在不同的控制器上)。

您还应该添加处理器标签objc,以便objective-c 方法可以调用它。

指派观察员:

nc.addObserver(
    self,
    selector: #selector(received(notification:)),
    name: LocationNotification.kLocationUpdated, object: nil
)

处理通知:

@objc public func locationUpdated(notification:Notification) 
    //Do something

希望这会有所帮助! :-)

【讨论】:

【参考方案2】:

您的代码语法对 Swift 3 有效。使用此语法,我假设您的 LocationNotification 对象看起来像这样:

struct LocationNotification 
    static let kLocationUpdated = Notification.Name(rawValue: "LocationUpdated")
    static let kAuthorizationStatusChanged = Notification.Name(rawValue: "AuthorizationStatusChanged")
    static let kLocationManagerDidFailWithError = Notification.Name(rawValue: "LocationManagerDidFailWithError")

【讨论】:

以上是关于在 Swift 3 中添加观察者和选择器的主要内容,如果未能解决你的问题,请参考以下文章

NSNotification 无法识别的选择器发送到 Swift 中的实例

Swift 3 TapGestureRecognizer 选择器抛出错误

如何在 swift 3.0 中制作时间选择器视图?

Swift 3:发送到实例 Xcode 8 的无法识别的选择器 [重复]

swift3国家和电话代码选择器

Swift 2.0 Xcode 7.1 图像选择器前置摄像头图像在选择时旋转