Skip to content

Instantly share code, notes, and snippets.

@huibin1984
Forked from kyleve/gist:8213806
Created January 5, 2014 07:25
Show Gist options
  • Save huibin1984/8265459 to your computer and use it in GitHub Desktop.
Save huibin1984/8265459 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment