Commits

Anonymous committed ea965e9

Added a simple CLI only KVO example.

Comments (0)

Files changed (1)

Examples/Foundation/simple-kvo.py

+#!/usr/bin/python
+
+import objc
+from Foundation import NSObject, NSKeyValueObservingOptionNew, NSKeyValueChangeNewKey
+
+class MyClass(NSObject):
+    base = objc.ivar("base", objc._C_INT)
+    power = objc.ivar("power", objc._C_INT)
+    result = objc.ivar("result", objc._C_INT)
+
+    def result(self):
+        return self.base ** self.power
+
+MyClass.setKeys_triggerChangeNotificationsForDependentKey_(
+    [u"base", u"power"],
+    u"result"
+)
+
+class Observer(NSObject):
+    def observeValueForKeyPath_ofObject_change_context_(self, path, object, changeDescription, context):
+        print 'path "%s" was changed to "%s".' % (path, changeDescription[NSKeyValueChangeNewKey])
+
+myInstance = MyClass.new()
+observer = Observer.new()
+
+myInstance.addObserver_forKeyPath_options_context_(observer, "result", NSKeyValueObservingOptionNew, 0)
+myInstance.addObserver_forKeyPath_options_context_(observer, "base", NSKeyValueObservingOptionNew, 0)
+myInstance.addObserver_forKeyPath_options_context_(observer, "power", NSKeyValueObservingOptionNew, 0)
+
+myInstance.setValue_forKey_(2, "base")
+myInstance.power = 4
+
+print "%d ** %d == %d" % (myInstance.base, myInstance.valueForKey_("power"), myInstance.result())
+
+    
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.