2017-01-29 31 views
1

我真的很难理解观察者的新语法。在Swift中添加观察者和选择器3

你能不能帮我翻译这斯威夫特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 
} 

希望这有助于! :-)

1

代码的语法是有效的斯威夫特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") 
}