Skip to content

Instantly share code, notes, and snippets.

@kyleve
Created January 2, 2014 01:46
Show Gist options
  • Star 165 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save kyleve/8213806 to your computer and use it in GitHub Desktop.
Save kyleve/8213806 to your computer and use it in GitHub Desktop.
/**
Provides the ability to verify key paths at compile time.
If "keyPath" does not exist, a compile-time error will be generated.
Example:
// Verifies "isFinished" exists on "operation".
NSString *key = SQKeyPath(operation, isFinished);
// Verifies "isFinished" exists on self.
NSString *key = SQSelfKeyPath(isFinished);
// Verifies "isFinished" exists on instances of NSOperation.
NSString *key = SQTypedKeyPath(NSOperation, isFinished);
*/
#define SQKeyPath(object, keyPath) ({ if (NO) { (void)((object).keyPath); } @#keyPath; })
#define SQSelfKeyPath(keyPath) SQKeyPath(self, keyPath)
#define SQTypedKeyPath(ObjectClass, keyPath) SQKeyPath(((ObjectClass *)nil), keyPath)
#define SQProtocolKeyPath(Protocol, keyPath) SQKeyPath(((id <Protocol>)nil), keyPath)
@xavierjurado
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment