Declared in NSSet+BlocksKit.h

Overview

Block extensions for NSSet.

Both inspired by and resembling Smalltalk syntax, these utilities allows for iteration of a set in a logical way that saves quite a bit of boilerplate code for filtering or finding objects or an object.

Includes code by the following:

Tasks

  • – bk_each:

    Loops through a set and executes the given block with each object.

  • – bk_apply:

    Enumerates through a set concurrently and executes the given block once for each object.

  • – bk_match:

    Loops through a set to find the object matching the block.

  • – bk_select:

    Loops through a set to find the objects matching the block.

  • – bk_reject:

    Loops through a set to find the objects not matching the block.

  • – bk_map:

    Call the block once for each object and create a set of the return values.

  • – bk_reduce:withBlock:

    Arbitrarily accumulate objects using a block.

  • – bk_any:

    Loops through a set to find whether any object matches the block.

  • – bk_none:

    Loops through a set to find whether no objects match the block.

  • – bk_all:

    Loops through a set to find whether all objects match the block.

Instance Methods

bk_all:

- (BOOL)bk_all:(BOOL ( ^ ) ( id obj ))block
Discussion

Loops through a set to find whether all objects match the block.

Parameters

block

A single-argument, BOOL-returning code block.

Return Value

YES if the block returns YES for all objects in the set, NO otherwise.

Declared In

NSSet+BlocksKit.h

bk_any:

- (BOOL)bk_any:(BOOL ( ^ ) ( id obj ))block
Discussion

Loops through a set to find whether any object matches the block.

This method is similar to the Scala list exists. It is functionally identical to bk_match: but returns a BOOL instead. It is not recommended to use bk_any: as a check condition before executing bk_match:, since it would require two loops through the array.

Parameters

block

A single-argument, BOOL-returning code block.

Return Value

YES for the first time the block returns YES for an object, NO otherwise.

Declared In

NSSet+BlocksKit.h

bk_apply:

- (void)bk_apply:(void ( ^ ) ( id obj ))block
Discussion

Enumerates through a set concurrently and executes the given block once for each object.

Enumeration will occur on appropriate background queues. This will have a noticeable speed increase, especially on dual-core devices, but you must be aware of the thread safety of the objects you message from within the block.

Parameters

block

A single-argument, void-returning code block.

Declared In

NSSet+BlocksKit.h

bk_each:

- (void)bk_each:(void ( ^ ) ( id obj ))block
Discussion

Loops through a set and executes the given block with each object.

Parameters

block

A single-argument, void-returning code block.

Declared In

NSSet+BlocksKit.h

bk_map:

- (NSSet *)bk_map:(id ( ^ ) ( id obj ))block
Discussion

Call the block once for each object and create a set of the return values.

This is sometimes referred to as a transform, mutating one of each object: NSSet *new = [mimeTypes bk_map:^id(id obj) { return [@“x-company-” stringByAppendingString:obj]); }];

Parameters

block

A single-argument, object-returning code block.

Return Value

Returns a set of the objects returned by the block.

Declared In

NSSet+BlocksKit.h

bk_match:

- (id)bk_match:(BOOL ( ^ ) ( id obj ))block
Discussion

Loops through a set to find the object matching the block.

bk_match: is functionally identical to bk_select:, but will stop and return on the first match.

Parameters

block

A single-argument, BOOL-returning code block.

Return Value

Returns the object if found, nil otherwise.

See Also

Declared In

NSSet+BlocksKit.h

bk_none:

- (BOOL)bk_none:(BOOL ( ^ ) ( id obj ))block
Discussion

Loops through a set to find whether no objects match the block.

This selector performs literally the exact same function as bk_all: but in reverse.

Parameters

block

A single-argument, BOOL-returning code block.

Return Value

YES if the block returns NO for all objects in the set, NO otherwise.

Declared In

NSSet+BlocksKit.h

bk_reduce:withBlock:

- (id)bk_reduce:(id)initial withBlock:(id ( ^ ) ( id sum , id obj ))block
Discussion

Arbitrarily accumulate objects using a block.

The concept of this selector is difficult to illustrate in words. The sum can be any NSObject, including (but not limited to) a string, number, or value.

You can also do something like summing the count of an item: NSUInteger numberOfBodyParts = [[bodyList bk_reduce:nil withBlock:^id(id sum, id obj) { return @([sum integerValue] + obj.numberOfAppendages); }] unsignedIntegerValue];

Parameters

initial

The value of the reduction at its start.

block

A block that takes the current sum and the next object to return the new sum.

Return Value

An accumulated value.

Declared In

NSSet+BlocksKit.h

bk_reject:

- (NSSet *)bk_reject:(BOOL ( ^ ) ( id obj ))block
Discussion

Loops through a set to find the objects not matching the block.

This selector performs literally the exact same function as select, but in reverse.

This is useful, as one may expect, for removing objects from a set: NSSet *new = [reusableWebViews bk_reject:^BOOL(id obj) { return ([obj isLoading]); }];

Parameters

block

A single-argument, BOOL-returning code block.

Return Value

Returns an array of all objects not found.

Declared In

NSSet+BlocksKit.h

bk_select:

- (NSSet *)bk_select:(BOOL ( ^ ) ( id obj ))block
Discussion

Loops through a set to find the objects matching the block.

Parameters

block

A single-argument, BOOL-returning code block.

Return Value

Returns a set of the objects found.

See Also

Declared In

NSSet+BlocksKit.h