Как создать макрос для указания на объект, найденный в результате итерации - PullRequest
0 голосов
/ 10 июня 2018

У меня есть метод, который находит родительский VC для вида:

-(UIViewController *)mainViewController {
    UIViewController *viewController = nil;
    for (UIView *next = [self superview]; next; next = next.superview) {
        UIResponder *nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[UIViewController class]]) {
            viewController = (UIViewController *)nextResponder;
            break;
        }
    }
    return viewController;
}

Вместо этого я хотел бы просто использовать parentVC в будущем, макрос, который я собираюсь создать.

Единственная проблема в том, что я не знаю, как преобразовать это в макрос, чтобы я мог просто сказать что-то вроде parentVC.view.alpha = 0.5f;

Я предполагаю, что макрос каким-то образом будет использовать блокитак что он может обработать эту итерацию в поиске родительского VC, в то же время будучи в состоянии рассматриваться как объект?Но я не могу понять, как это может сработать.

1 Ответ

0 голосов
/ 10 июня 2018

удалось заставить его работать с блоками в виде:

((^NSObject*(void){/*logic+return here*/})())

Конечный макрос:

#define parentVC (\
(^UIViewController*(void){\
UIViewController *viewController = nil;\
for (UIView *next = [self isKindOfClass:[UIViewController class]]?[((UIViewController *)self).view superview]:[((UIView *)self) superview]; next; next = next.superview) {\
UIResponder *nextResponder = [next nextResponder];\
if ([nextResponder isKindOfClass:[UIViewController class]]) {\
viewController = (UIViewController *)nextResponder;\
break;\
}\
}\
return viewController;\
})()\
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...