Objective c 如何创建指向通过迭代找到的对象的宏

Objective c 如何创建指向通过迭代找到的对象的宏,objective-c,macros,clang,objective-c-blocks,Objective C,Macros,Clang,Objective C Blocks,我有一个方法可以查找视图的parentVC: -(UIViewController *)mainViewController { UIViewController *viewController = nil; for (UIView *next = [self superview]; next; next = next.superview) { UIResponder *nextResponder = [next nextResponder]; i

我有一个方法可以查找视图的parentVC:

-(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时处理此迭代,同时仍然可以将其视为对象?但我不知道它是如何工作的。

能够以以下形式使用块:

((^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;\
})()\
)

可能重复@Willeke No,这与如何找到视图的父VC无关,因为您可以看到我的代码已经做到了这一点。这是一个关于如何将迭代查找对象的方法转换为宏的问题。我提供的父VC代码只是一个示例用例。宏的示例在结尾。@Willeke-Ah这很有用,谢谢。然而,这不是一个重复的问题;这只是那个问题中的一些额外问题;StackOverflow被设置为一个格式索引,因此这个问题保持开放状态将帮助未来的读者找到答案,因为提议的副本根本没有在其问题标题中解决这里提出的问题,有人只是碰巧在那里的一个答案中作为脚注发布了我问题的解决方案。