From 4266447d1b3757ac6707c2617cb3e4b8c63aaa60 Mon Sep 17 00:00:00 2001 From: Arslaan Pathan Date: Fri, 2 Oct 2026 10:33:02 +1300 Subject: predicates/filtering and observers/KVO --- main.m | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'main.m') diff --git a/main.m b/main.m index 1839123..ef6c88f 100644 --- a/main.m +++ b/main.m @@ -102,6 +102,19 @@ static int playerCount = 0; @end +@interface PlayerObserver : NSObject +@end + +@implementation PlayerObserver + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context { + NSLog(@"PlayerObserver: %@ changed!", keyPath); + NSLog(@"Old: %@", [change objectForKey:NSKeyValueChangeOldKey]); + NSLog(@"New: %@", [change objectForKey:NSKeyValueChangeNewKey]); +} + +@end + int main(void) { @autoreleasepool { Hello *hello = [Hello new]; @@ -139,8 +152,32 @@ int main(void) { NSLog(@"%@", people); + NSArray *players = @[ + @{@"name": @"French Hacker", @"score": @538}, + @{@"name": @"Arslaan", @"score": @53827}, + @{@"name": @"John Hackclub", @"score": @120} + ]; + + NSPredicate *highScore = [NSPredicate predicateWithFormat:@"score > 300"]; + + NSArray *filtered = [players filteredArrayUsingPredicate:highScore]; + + NSLog(@"All players: %@", players); + NSLog(@"High scorers (score > 300): %@", filtered); + + Player *player3 = [Player new]; + PlayerObserver *observer = [PlayerObserver new]; + + [player3 addObserver:observer forKeyPath:@"name" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:NULL]; + [player3 setName:@"Arslaan"]; + [player3 setName:@"Arslaan Pathan"]; + + [player3 removeObserver:observer forKeyPath:@"name" context:NULL]; + [player release]; [player2 release]; + [observer release]; + [player3 release]; [hello release]; [ehello release]; [dehello release]; -- cgit v1.2.3