Skip to content

Instantly share code, notes, and snippets.

@theoknock
Created November 4, 2021 23:16
Show Gist options
  • Save theoknock/dfcf3a3f3217a1b431bc3b61cf75464a to your computer and use it in GitHub Desktop.
Save theoknock/dfcf3a3f3217a1b431bc3b61cf75464a to your computer and use it in GitHub Desktop.
Block Computed Property Design Pattern. Defines a type of struct and initializes an instance that passes a pointer to the instance to its block member.
typedef struct __attribute__((objc_boxable)) ArcDegreesMeasurements ArcDegreesMeasurements;
typedef NSUInteger (^(^ArcDegreesMeasurementsEnd)(void))(void);
struct __attribute__((objc_boxable)) ArcDegreesMeasurements
{
NSUInteger start;
NSUInteger length;
__unsafe_unretained ArcDegreesMeasurementsEnd end;
NSUInteger sectors;
} arcDegreesMeasurements = {
.start = 0,
.length = 360,
.end = ^ {
return ^ (ArcDegreesMeasurements * arc_degree_measurements) {
return ^ NSUInteger (void) {
return (NSUInteger)radiansToDegrees(degreesToRadians(arc_degree_measurements->start + arc_degree_measurements->length));
};
}(&arcDegreesMeasurements);
}
};
// To access the value of the computed property: arcDegreesMeasurements.end()()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment