ios - Add property observer to global variable inside class in Swift -


i have variable globalvariable declared @ global scope may change @ time.

different viewcontrollers in app need react differently, when globalvariable changes.

thus desirable add property observer in each viewcontroller execute needed code when globalvariable changes.

i cannot seem achieve override or extension. what way go here?

if goal know when global variable changed, have post notification upon change:

extension nsnotification.name {     static let globalvariablechanged = nsnotification.name(bundle.main.bundleidentifier! + ".globalvariable") }  var globalvariable: int = 0 {     didset {         notificationcenter.default.post(name: .globalvariablechanged, object: nil)     } } 

then object can add observer notification:

class viewcontroller: uiviewcontroller {      private var observer: nsobjectprotocol!      override func viewdidload() {         super.viewdidload()          // add observer; make sure `self` references `weak` or `unowned`; obviously, if don't reference `self`, that's not necessary          observer = notificationcenter.default.addobserver(forname: .globalvariablechanged, object: nil, queue: .main) { [weak self] notification in             // globalvariable here         }     }      deinit {         // remember remove when object deallocated          notificationcenter.default.removeobserver(observer)     }  } 

note, didset mechanism not detect changes if (a) global variable reference type, i.e. class; , (b) merely mutates object global variable references rather replacing new instance. identify scenario, need use kvo or other mechanism detect mutation.


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -