Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class functionPair {
- let target : NSObject
- let selector : Selector
- init(_ selet : Selector, _ target : NSObject) {
- self.target = target
- self.selector = selet
- }
- }
- class NotificationCenter {
- static let shared = NotificationCenter()
- var map :[String: [functionPair]]
- private init(){
- map = [String: [functionPair]]()
- }
- func addObserver(_ event: String, _ selector : Selector, _ target: NSObject){
- let pair = functionPair(selector, target)
- map[event, default : [functionPair]()].append(pair)
- }
- func postEvent(_ event: String){
- if let list = map[event]{
- for pair in list {
- pair.target.perform(pair.selector)
- }
- }
- }
- func removeObserver(_ event: String, _ target: NSObject) {
- if let list = map[event]{
- map[event] = list.filter{ $0.target !== target}
- }
- }
- }
- class obj2 : NSObject{
- @objc func printSelf(){
- print("im obj2")
- }
- }
- class obj1 : NSObject{
- @objc func printSelf(){
- print("im obj1")
- }
- @objc func printNumber(){
- print("number number")
- }
- }
- let o1 = obj1()
- let o2 = obj2()
- NotificationCenter.shared.addObserver("event1", #selector(o1.printSelf), o1)
- NotificationCenter.shared.addObserver("event1", #selector(o2.printSelf), o2)
- NotificationCenter.shared.addObserver("event2", #selector(o1.printNumber), o1)
- NotificationCenter.shared.postEvent("event1")
- NotificationCenter.shared.postEvent("event2")
- NotificationCenter.shared.removeObserver("event1", o1)
- NotificationCenter.shared.postEvent("event1")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement