Advertisement
HXXXXJ

Notification center

Mar 11th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.68 KB | None | 0 0
  1.  
  2. class functionPair {
  3.     let target : NSObject
  4.     let selector : Selector
  5.     init(_ selet : Selector, _ target : NSObject) {
  6.         self.target = target
  7.         self.selector = selet
  8.     }
  9. }
  10.  
  11.  
  12. class NotificationCenter {
  13.     static let shared = NotificationCenter()
  14.     var map :[String: [functionPair]]
  15.  
  16.     private init(){
  17.         map = [String: [functionPair]]()
  18.     }
  19.  
  20.     func addObserver(_ event: String, _ selector : Selector, _ target: NSObject){
  21.         let pair = functionPair(selector, target)
  22.         map[event, default : [functionPair]()].append(pair)
  23.     }
  24.    
  25.     func postEvent(_ event: String){
  26.         if let list = map[event]{
  27.             for pair in list {
  28.                 pair.target.perform(pair.selector)
  29.             }
  30.         }
  31.     }
  32.     func removeObserver(_ event: String, _ target: NSObject) {
  33.         if let list = map[event]{
  34.             map[event] = list.filter{  $0.target !== target}
  35.         }
  36.     }
  37.  
  38. }
  39. class obj2 : NSObject{
  40.     @objc func printSelf(){
  41.         print("im obj2")
  42.     }
  43. }
  44.  
  45. class obj1 : NSObject{
  46.     @objc func printSelf(){
  47.         print("im obj1")
  48.     }
  49.    
  50.     @objc func printNumber(){
  51.         print("number number")
  52.     }
  53. }
  54.    
  55. let o1 = obj1()
  56. let o2 = obj2()
  57.  
  58. NotificationCenter.shared.addObserver("event1", #selector(o1.printSelf), o1)
  59. NotificationCenter.shared.addObserver("event1", #selector(o2.printSelf), o2)
  60. NotificationCenter.shared.addObserver("event2", #selector(o1.printNumber), o1)
  61.  
  62.  
  63.  
  64. NotificationCenter.shared.postEvent("event1")
  65. NotificationCenter.shared.postEvent("event2")
  66. NotificationCenter.shared.removeObserver("event1", o1)
  67. NotificationCenter.shared.postEvent("event1")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement