Guest User

Untitled

a guest
Aug 25th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #define PSCCAssert(condition, description, ...) \
  2. _Pragma("clang diagnostic push") \
  3. _Pragma("clang diagnostic ignored \"-Wnullable-to-nonnull-conversion\"") \
  4. NSCAssert(condition, description, ##__VA_ARGS__) \
  5. _Pragma("clang diagnostic pop")
  6.  
  7. #define PSCWeakifyAs(object, weakName) typeof(object) __weak weakName = object
  8.  
  9. void (^psc_targetActionBlock(id target, SEL action))(id) {
  10. // If there's no target, return an empty block.
  11. if (!target) return ^(__unused id sender) {};
  12.  
  13. NSCParameterAssert(action);
  14.  
  15. // All ObjC methods have two arguments. This fails if either target is nil, action not implemented or else.
  16. NSUInteger numberOfArguments = [target methodSignatureForSelector:action].numberOfArguments;
  17. PSCCAssert(numberOfArguments == 2 || numberOfArguments == 3, @"%@ should have at most one argument.", NSStringFromSelector(action));
  18.  
  19. PSCWeakifyAs(target, weakTarget);
  20. if (numberOfArguments == 2) {
  21. return ^(__unused id sender) { PSC_SILENCE_CALL_TO_UNKNOWN_SELECTOR([weakTarget performSelector:action];) };
  22. } else {
  23. return ^(id sender) { PSC_SILENCE_CALL_TO_UNKNOWN_SELECTOR([weakTarget performSelector:action withObject:sender];) };
  24. }
  25. }
  26.  
  27.  
  28. // Usage:
  29. // psc_targetActionBlock(pdfController.outlineButtonItem.target, pdfController.outlineButtonItem.action)(nil);
Add Comment
Please, Sign In to add comment