迭代特定类型的所有子视图

Nil*_*ils 5 objective-c uiview ios objective-c-blocks

迭代一个类的子视图中的所有UIViews然后使用循环中的类型检查isKindOfClass使我的代码看起来多余.所以我编写了以下方法,为每个子视图执行一个块.

@implementation Util

+ (void)iterateOverSubviewsOfType:(Class)viewType 
                   view:(UIView*)view
                   blockToExecute:(void (^)(id subview))block
{
    for (UIView* subview in view.subviews) {
        if ([subview isKindOfClass:viewType]) {
            block(subview);
        }
    }
}

@end
Run Code Online (Sandbox Code Playgroud)

传递给此方法的块采用类型的参数id.这里使用的类型当然应该与第一个参数一样.但到目前为止,我还没有找到一种方法来使这种类型更安全.

Kyr*_*off 11

试试这样,应该足够安全.

for (id subview in view.subviews) {
        if ([subview isMemberOfClass:viewType]) {
            block(subview);
        }
    }
Run Code Online (Sandbox Code Playgroud)