> On Jun 17, 2017, at 5:32 AM, Jonathan Mitchell <li...@mugginsoft.com> wrote:
> 
>> On 16 Jun 2017, at 23:18, Quincey Morris 
>> <quinceymor...@rivergatesoftware.com 
>> <mailto:quinceymor...@rivergatesoftware.com>> wrote:
>> 
>> On Jun 16, 2017, at 14:41 , Jonathan Mitchell <li...@mugginsoft.com 
>> <mailto:li...@mugginsoft.com>> wrote:
>>> 
>>> I sometimes use the default NSObject bind: to set up a simple one way 
>>> operation as you describe as opposed to a discrete observation.
>> 
>> With macOS 10.13, the new block/closure-based KVO “addObserver” method is 
>> probably an easier way, although you do have to remove it manually.
>> 
> The block/closure improvements are long overdue IMHO.
> 
> I use a home brewed approach using BPBlockValueTransformer : 
> NSValueTransformer with bindings that gives a lot more flexibility.
> A trivial example involving a closure would be:
> 
>    BPBlockValueTransformer *blockValueTransformer = [BPBlockValueTransformer 
> valueTransformerWithBlock:^id(NSNumber *value) {
>       strongify(self);
>       return ([value boolValue] || self.isFree)? @“Freedom for all" : 
> @“Freedom for no-one";
>    }];
>    [self.titleTextField bind:NSValueBinding toObject:self.repObjCon 
> withKeyPath:@"selection.isHidden" options:@{NSValueTransformerBindingOption : 
> blockValueTransformer}];
> 
> The downside is that you cannot establish the binding in the NIB.

It’s definitely overdue; I’ve been using a blocks-based wrapper around KVO for 
years. 

A couple of notes, though, re-reading the message this replied to. The new 
blocks-based API, ‘observe()’, is actually part of the Swift overlay, which 
means it works on older macOS versions, not just 10.13. Also, you don’t have to 
remove it manually, and that’s in fact one of its major features—it 
automatically deregisters itself whenever the observer falls out of scope. So 
as long as you make sure you don’t set up a retain cycle with captured values, 
you can just stash the observer in an ivar, and when your object gets 
deallocated, your observer will be unregistered. Much easier than what we had 
to do before.

Charles

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to